Commit 24b92211 authored by Andrii Grynenko's avatar Andrii Grynenko Committed by Dave Watson

Make folly::Singleton's destruction happen earlier

Summary: Schedule destroyInstances to be executed via atexit in registrationComplete. registrationComplete is called from main(), so this makes sure folly::Singleton's will be destoyed before all singletons constructed before main() (which should cover all third-party libraries' singletons).

Test Plan: unit test

Reviewed By: chip@fb.com

Subscribers: trunkagent, njormrod, folly-diffs@

FB internal diff: D1717963

Tasks: 5666654

Signature: t1:1717963:1417659478:c50c271d1786be75499565f6ab9c0a1a6f6f347d
parent 44e48457
...@@ -208,7 +208,7 @@ class SingletonVault { ...@@ -208,7 +208,7 @@ class SingletonVault {
// Mark registration is complete; no more singletons can be // Mark registration is complete; no more singletons can be
// registered at this point. // registered at this point.
void registrationComplete() { void registrationComplete() {
scheduleDestroyInstances(); std::atexit([](){ SingletonVault::singleton()->destroyInstances(); });
RWSpinLock::WriteHolder wh(&stateMutex_); RWSpinLock::WriteHolder wh(&stateMutex_);
...@@ -329,6 +329,9 @@ class SingletonVault { ...@@ -329,6 +329,9 @@ class SingletonVault {
SingletonEntry(SingletonEntry&&) = delete; SingletonEntry(SingletonEntry&&) = delete;
}; };
// This method only matters if registrationComplete() is never called.
// Otherwise destroyInstances is scheduled to be executed atexit.
//
// Initializes static object, which calls destroyInstances on destruction. // Initializes static object, which calls destroyInstances on destruction.
// Used to have better deletion ordering with singleton not managed by // Used to have better deletion ordering with singleton not managed by
// folly::Singleton. The desruction will happen in the following order: // folly::Singleton. The desruction will happen in the following order:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment