From 24b9221197183fa3a54426814f1df04ed2214fd4 Mon Sep 17 00:00:00 2001 From: Andrii Grynenko Date: Wed, 3 Dec 2014 17:26:45 -0800 Subject: [PATCH] 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 --- folly/experimental/Singleton.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/folly/experimental/Singleton.h b/folly/experimental/Singleton.h index c42daf01..20416015 100644 --- a/folly/experimental/Singleton.h +++ b/folly/experimental/Singleton.h @@ -208,7 +208,7 @@ class SingletonVault { // Mark registration is complete; no more singletons can be // registered at this point. void registrationComplete() { - scheduleDestroyInstances(); + std::atexit([](){ SingletonVault::singleton()->destroyInstances(); }); RWSpinLock::WriteHolder wh(&stateMutex_); @@ -329,6 +329,9 @@ class SingletonVault { 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. // Used to have better deletion ordering with singleton not managed by // folly::Singleton. The desruction will happen in the following order: -- 2.34.1