Commit 7bf14860 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

folly::Init, RAII variant of folly::init

Summary:
[Folly] `folly::Init`, RAII variant of `folly::init`.

Use it in `main` used by unit-tests.

Reviewed By: ot

Differential Revision: D6566358

fbshipit-source-id: fb8e5a18fc43eb65e2cbeb070d97094bd413bb96
parent 2d80d4e0
......@@ -54,4 +54,12 @@ void init(int* argc, char*** argv, bool removeFlags) {
folly::symbolizer::installFatalSignalCallbacks();
#endif
}
Init::Init(int* argc, char*** argv, bool removeFlags) {
init(argc, argv, removeFlags);
}
Init::~Init() {
SingletonVault::singleton()->destroyInstances();
}
} // namespace folly
......@@ -16,6 +16,8 @@
#pragma once
#include <folly/CPortability.h>
/*
* Calls common init functions in the necessary order
* Among other things, this ensures that folly::Singletons are initialized
......@@ -30,4 +32,23 @@ namespace folly {
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
......@@ -27,6 +27,6 @@ int main(int argc, char** argv) __attribute__((__weak__));
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
folly::init(&argc, &argv);
folly::Init init(&argc, &argv);
return RUN_ALL_TESTS();
}
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