folly::symbolizer::installFatalSignalCallbacks();
#endif
}
+
+Init::Init(int* argc, char*** argv, bool removeFlags) {
+ init(argc, argv, removeFlags);
+}
+
+Init::~Init() {
+ SingletonVault::singleton()->destroyInstances();
+}
} // namespace folly
#pragma once
+#include <folly/CPortability.h>
+
/*
* Calls common init functions in the necessary order
* Among other things, this ensures that folly::Singletons are initialized
void init(int* argc, char*** argv, bool removeFlags = true);
+/*
+ * An RAII object to be constructed at the beginning of main() and destructed
+ * implicitly at the end of main().
+ *
+ * The constructor performs the same setup as folly::init(), including
+ * initializing singletons managed by folly::Singleton.
+ *
+ * The destructor destroys all singletons managed by folly::Singleton, yielding
+ * better shutdown behavior when performed at the end of main(). In particular,
+ * this guarantees that all singletons managed by folly::Singleton are destroyed
+ * before all Meyers singletons are destroyed.
+ */
+class Init {
+ public:
+ // Force ctor & dtor out of line for better stack traces even with LTO.
+ FOLLY_NOINLINE Init(int* argc, char*** argv, bool removeFlags = true);
+ FOLLY_NOINLINE ~Init();
+};
+
} // namespace folly
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
- folly::init(&argc, &argv);
+ folly::Init init(&argc, &argv);
return RUN_ALL_TESTS();
}