Don't derive name on singleton creation
authorAlex Orlov <phoenix@instagram.com>
Mon, 15 Aug 2016 20:58:06 +0000 (13:58 -0700)
committerFacebook Github Bot 5 <facebook-github-bot-5-bot@fb.com>
Mon, 15 Aug 2016 21:08:31 +0000 (14:08 -0700)
Summary: instead fetch it only on exception

Reviewed By: andriigrynenko

Differential Revision: D3718303

fbshipit-source-id: a021d150f20ab00fe8146f17b19a69fa0da2b0da

folly/Singleton-inl.h

index a326b12b1a920baac505d8c690ddd933d8d0eb55..83dbd2f6eb07bec7ae88271f28363a6e8b1bcddb 100644 (file)
@@ -233,17 +233,16 @@ void SingletonHolder<T>::createInstance() {
   auto print_destructor_stack_trace =
     std::make_shared<std::atomic<bool>>(false);
   auto teardown = teardown_;
-  auto type_name = type().name();
 
   // Can't use make_shared -- no support for a custom deleter, sadly.
   std::shared_ptr<T> instance(
     create_(),
-    [destroy_baton, print_destructor_stack_trace, teardown, type_name]
+    [destroy_baton, print_destructor_stack_trace, teardown, type = type()]
     (T* instance_ptr) mutable {
       teardown(instance_ptr);
       destroy_baton->post();
       if (print_destructor_stack_trace->load()) {
-        std::string output = "Singleton " + type_name + " was destroyed.\n";
+        std::string output = "Singleton " + type.name() + " was destroyed.\n";
 
         auto stack_trace_getter = SingletonVault::stackTraceGetter().load();
         auto stack_trace = stack_trace_getter ? stack_trace_getter() : "";