Fix the last issues with exception_wrapper under MSVC
[folly.git] / folly / Singleton-inl.h
index 40c7a27af3c098d0a0c0e9b9f11b4c873cb1a1b4..e5b21dd5318cca600cda5946ecb4fb2bcf6f0e61 100644 (file)
@@ -69,7 +69,9 @@ void SingletonHolder<T>::registerSingletonMock(CreateFunc c, TeardownFunc t) {
     LOG(FATAL) << "Registering mock before singleton was registered: "
                << type().name();
   }
-  destroyInstance();
+  if (state_ == SingletonHolderState::Living) {
+    destroyInstance();
+  }
 
   {
     auto creationOrder = vault_.creationOrder_.wlock();
@@ -237,7 +239,11 @@ void SingletonHolder<T>::createInstance() {
     }
 
     LOG(FATAL) << "Singleton " << type().name() << " requested before "
-               << "registrationComplete() call. " << stack_trace;
+               << "registrationComplete() call.\n"
+               << "This usually means that either main() never called "
+               << "folly::init, or singleton was requested before main() "
+               << "(which is not allowed).\n"
+               << stack_trace;
   }
   if (state->state == SingletonVault::SingletonVaultState::Quiescing) {
     return;