mirror of https://github.com/Icinga/icinga2.git
Fix static initializers for Utility::AddDeferredInitializer
fixes #7646
This commit is contained in:
parent
83a2e4c350
commit
e4bfb5f922
|
@ -56,8 +56,6 @@ using namespace icinga;
|
||||||
|
|
||||||
boost::thread_specific_ptr<String> Utility::m_ThreadName;
|
boost::thread_specific_ptr<String> Utility::m_ThreadName;
|
||||||
boost::thread_specific_ptr<unsigned int> Utility::m_RandSeed;
|
boost::thread_specific_ptr<unsigned int> Utility::m_RandSeed;
|
||||||
boost::thread_specific_ptr<bool> Utility::m_LoadingLibrary;
|
|
||||||
boost::thread_specific_ptr<std::vector<boost::function<void(void)> > > Utility::m_DeferredInitializers;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Demangles a symbol name.
|
* Demangles a symbol name.
|
||||||
|
@ -343,23 +341,29 @@ Utility::LoadExtensionLibrary(const String& library)
|
||||||
return hModule;
|
return hModule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::thread_specific_ptr<std::vector<boost::function<void(void)> > >& Utility::GetDeferredInitializers(void)
|
||||||
|
{
|
||||||
|
static boost::thread_specific_ptr<std::vector<boost::function<void(void)> > > initializers;
|
||||||
|
return initializers;
|
||||||
|
}
|
||||||
|
|
||||||
void Utility::ExecuteDeferredInitializers(void)
|
void Utility::ExecuteDeferredInitializers(void)
|
||||||
{
|
{
|
||||||
if (!m_DeferredInitializers.get())
|
if (!GetDeferredInitializers().get())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BOOST_FOREACH(const boost::function<void(void)>& callback, *m_DeferredInitializers.get())
|
BOOST_FOREACH(const boost::function<void(void)>& callback, *GetDeferredInitializers().get())
|
||||||
callback();
|
callback();
|
||||||
|
|
||||||
m_DeferredInitializers.reset();
|
GetDeferredInitializers().reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Utility::AddDeferredInitializer(const boost::function<void(void)>& callback)
|
void Utility::AddDeferredInitializer(const boost::function<void(void)>& callback)
|
||||||
{
|
{
|
||||||
if (!m_DeferredInitializers.get())
|
if (!GetDeferredInitializers().get())
|
||||||
m_DeferredInitializers.reset(new std::vector<boost::function<void(void)> >());
|
GetDeferredInitializers().reset(new std::vector<boost::function<void(void)> >());
|
||||||
|
|
||||||
m_DeferredInitializers.get()->push_back(callback);
|
GetDeferredInitializers().get()->push_back(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -141,8 +141,9 @@ private:
|
||||||
|
|
||||||
static boost::thread_specific_ptr<String> m_ThreadName;
|
static boost::thread_specific_ptr<String> m_ThreadName;
|
||||||
static boost::thread_specific_ptr<unsigned int> m_RandSeed;
|
static boost::thread_specific_ptr<unsigned int> m_RandSeed;
|
||||||
static boost::thread_specific_ptr<bool> m_LoadingLibrary;
|
|
||||||
static boost::thread_specific_ptr<std::vector<boost::function<void(void)> > > m_DeferredInitializers;
|
static boost::thread_specific_ptr<std::vector<boost::function<void(void)> > >& GetDeferredInitializers(void);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue