Add null check to avoid crash in unit tests that use mock singletons.
authorAdrian Hamza <adriah@fb.com>
Mon, 9 Mar 2015 21:04:47 +0000 (14:04 -0700)
committerAndre Azevedo <aap@fb.com>
Wed, 18 Mar 2015 02:48:37 +0000 (19:48 -0700)
Summary: Some unit tests owned by my team are failing due to segmentation fault in SingletonHolder<T>::registerSingletonMock -> SingletonHolder<T>::destroyInstance.

Test Plan: Run folly unit tests and my unit tests.

Reviewed By: henryf@fb.com

Subscribers: trunkagent, folly-diffs@, yfeldblum

FB internal diff: D1873889

Signature: t1:1873889:1425925156:29d54092939d7e9debea3fd55f7105fd320e987e

Blame Revision: 91f4942e

folly/experimental/Singleton-inl.h

index 302fbc9..c853da6 100644 (file)
@@ -92,16 +92,18 @@ template <typename T>
 void SingletonHolder<T>::destroyInstance() {
   state_ = SingletonHolderState::Dead;
   instance_.reset();
-  auto wait_result = destroy_baton_->timed_wait(
-    std::chrono::steady_clock::now() + kDestroyWaitTime);
-  if (!wait_result) {
-    print_destructor_stack_trace_->store(true);
-    LOG(ERROR) << "Singleton of type " << type_.name() << " has a "
-               << "living reference at destroyInstances time; beware! Raw "
-               << "pointer is " << instance_ptr_ << ". It is very likely "
-               << "that some other singleton is holding a shared_ptr to it. "
-               << "Make sure dependencies between these singletons are "
-               << "properly defined.";
+  if (destroy_baton_) {
+    auto wait_result = destroy_baton_->timed_wait(
+      std::chrono::steady_clock::now() + kDestroyWaitTime);
+    if (!wait_result) {
+      print_destructor_stack_trace_->store(true);
+      LOG(ERROR) << "Singleton of type " << type_.name() << " has a "
+                 << "living reference at destroyInstances time; beware! Raw "
+                 << "pointer is " << instance_ptr_ << ". It is very likely "
+                 << "that some other singleton is holding a shared_ptr to it. "
+                 << "Make sure dependencies between these singletons are "
+                 << "properly defined.";
+    }
   }
 }