Improve messaging when registrationComplete hasn't been called
authorChip Turner <chip@fb.com>
Thu, 7 Aug 2014 13:19:22 +0000 (06:19 -0700)
committerSara Golemon <sgolemon@fb.com>
Tue, 9 Sep 2014 21:22:23 +0000 (14:22 -0700)
Summary:
The previous message from CHECK_THROW was difficult to debug.
This improves the messaging to be more actionable.

Test Plan: runtests

Reviewed By: lins@fb.com

Subscribers: lins, anca, fugalh

FB internal diff: D1483915

folly/experimental/Singleton.h

index aa3130fe85985962723635b5c46123dabcc4fc7b..0c12519be5603363199aa12c3c8856e091beb6e3 100644 (file)
@@ -138,7 +138,12 @@ class SingletonVault {
   // Retrieve a singleton from the vault, creating it if necessary.
   std::shared_ptr<void> get_shared(const std::type_info& type) {
     std::unique_lock<std::mutex> lock(mutex_);
-    CHECK_THROW(state_ == SingletonVaultState::Running, std::logic_error);
+    if (state_ != SingletonVaultState::Running) {
+      throw std::logic_error(
+          "Attempt to load a singleton before "
+          "SingletonVault::registrationComplete was called (hint: you probably "
+          "didn't call initFacebook)");
+    }
 
     auto it = singletons_.find(type);
     if (it == singletons_.end()) {