diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:32:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:32:39 +0000 |
commit | 56ae875861ab260b80a030f50c4aff9f9dc8fff0 (patch) | |
tree | 531412110fc901a5918c7f7442202804a83cada9 /lib/base/loader.cpp | |
parent | Initial commit. (diff) | |
download | icinga2-56ae875861ab260b80a030f50c4aff9f9dc8fff0.tar.xz icinga2-56ae875861ab260b80a030f50c4aff9f9dc8fff0.zip |
Adding upstream version 2.14.2.upstream/2.14.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/base/loader.cpp')
-rw-r--r-- | lib/base/loader.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/base/loader.cpp b/lib/base/loader.cpp new file mode 100644 index 0000000..a4364de --- /dev/null +++ b/lib/base/loader.cpp @@ -0,0 +1,38 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#include "base/loader.hpp" +#include "base/logger.hpp" +#include "base/exception.hpp" +#include "base/application.hpp" + +using namespace icinga; + +boost::thread_specific_ptr<Loader::DeferredInitializerPriorityQueue>& Loader::GetDeferredInitializers() +{ + static boost::thread_specific_ptr<DeferredInitializerPriorityQueue> initializers; + return initializers; +} + +void Loader::ExecuteDeferredInitializers() +{ + auto& initializers = GetDeferredInitializers(); + if (!initializers.get()) + return; + + while (!initializers->empty()) { + DeferredInitializer initializer = initializers->top(); + initializers->pop(); + initializer(); + } +} + +void Loader::AddDeferredInitializer(const std::function<void()>& callback, InitializePriority priority) +{ + auto& initializers = GetDeferredInitializers(); + if (!initializers.get()) { + initializers.reset(new Loader::DeferredInitializerPriorityQueue()); + } + + initializers->push(DeferredInitializer(callback, priority)); +} + |