mirror of
https://github.com/Icinga/icinga2.git
synced 2025-04-08 17:05:25 +02:00
This commit adds a new initialization priority `FreezeNamespaces` that is run last and moves all calls to `Namespace::Freeze()` there. This allows all other initialization functions to still update namespaces without the use of the `overrideFrozen` flag. It also moves the initialization of `System.Platform*` and `System.Build*` to an initialize function so that these can also be set without setting `overrideFrozen`. This is preparation for a following commit that will make the frozen flag in namespaces finial, no longer allowing it to be overriden (freezing the namespace will disable locking, so performing further updates would be unsafe).
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
|
|
|
|
#ifndef INITIALIZE_H
|
|
#define INITIALIZE_H
|
|
|
|
#include "base/i2-base.hpp"
|
|
#include <functional>
|
|
|
|
namespace icinga
|
|
{
|
|
|
|
/**
|
|
* Priority values for use with the INITIALIZE_ONCE_WITH_PRIORITY macro.
|
|
*
|
|
* The values are given in the order of initialization.
|
|
*/
|
|
enum class InitializePriority {
|
|
CreateNamespaces,
|
|
InitIcingaApplication,
|
|
RegisterTypeType,
|
|
RegisterObjectType,
|
|
RegisterPrimitiveTypes,
|
|
RegisterBuiltinTypes,
|
|
RegisterFunctions,
|
|
RegisterTypes,
|
|
EvaluateConfigFragments,
|
|
Default,
|
|
FreezeNamespaces,
|
|
};
|
|
|
|
#define I2_TOKENPASTE(x, y) x ## y
|
|
#define I2_TOKENPASTE2(x, y) I2_TOKENPASTE(x, y)
|
|
|
|
#define I2_UNIQUE_NAME(prefix) I2_TOKENPASTE2(prefix, __COUNTER__)
|
|
|
|
bool InitializeOnceHelper(const std::function<void()>& func, InitializePriority priority = InitializePriority::Default);
|
|
|
|
#define INITIALIZE_ONCE(func) \
|
|
namespace { namespace I2_UNIQUE_NAME(io) { \
|
|
bool l_InitializeOnce(icinga::InitializeOnceHelper(func)); \
|
|
} }
|
|
|
|
#define INITIALIZE_ONCE_WITH_PRIORITY(func, priority) \
|
|
namespace { namespace I2_UNIQUE_NAME(io) { \
|
|
bool l_InitializeOnce(icinga::InitializeOnceHelper(func, priority)); \
|
|
} }
|
|
}
|
|
|
|
#endif /* INITIALIZE_H */
|