[Lldb-commits] [lldb] r262053 - Make sure the Target, Process and Thread GetGlobalProperties() static methods are thread safe.

Greg Clayton via lldb-commits lldb-commits at lists.llvm.org
Fri Feb 26 11:38:18 PST 2016


Author: gclayton
Date: Fri Feb 26 13:38:18 2016
New Revision: 262053

URL: http://llvm.org/viewvc/llvm-project?rev=262053&view=rev
Log:
Make sure the Target, Process and Thread GetGlobalProperties() static methods are thread safe.

<rdar://problem/22595283>


Modified:
    lldb/trunk/source/Target/Process.cpp
    lldb/trunk/source/Target/Target.cpp
    lldb/trunk/source/Target/Thread.cpp

Modified: lldb/trunk/source/Target/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=262053&r1=262052&r2=262053&view=diff
==============================================================================
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Fri Feb 26 13:38:18 2016
@@ -9,6 +9,7 @@
 
 // C Includes
 // C++ Includes
+#include <mutex>
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Target/Process.h"
@@ -832,8 +833,11 @@ const ProcessPropertiesSP &
 Process::GetGlobalProperties()
 {
     static ProcessPropertiesSP g_settings_sp;
-    if (!g_settings_sp)
-        g_settings_sp.reset (new ProcessProperties (NULL));
+    static std::once_flag g_once_flag;
+    std::call_once(g_once_flag,  []() {
+        if (!g_settings_sp)
+            g_settings_sp.reset (new ProcessProperties (NULL));
+    });
     return g_settings_sp;
 }
 

Modified: lldb/trunk/source/Target/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=262053&r1=262052&r2=262053&view=diff
==============================================================================
--- lldb/trunk/source/Target/Target.cpp (original)
+++ lldb/trunk/source/Target/Target.cpp Fri Feb 26 13:38:18 2016
@@ -9,6 +9,7 @@
 
 // C Includes
 // C++ Includes
+#include <mutex>
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Target/Target.h"
@@ -2778,10 +2779,11 @@ const TargetPropertiesSP &
 Target::GetGlobalProperties()
 {
     static TargetPropertiesSP g_settings_sp;
-    if (!g_settings_sp)
-    {
-        g_settings_sp.reset(new TargetProperties(nullptr));
-    }
+    static std::once_flag g_once_flag;
+    std::call_once(g_once_flag,  []() {
+        if (!g_settings_sp)
+            g_settings_sp.reset(new TargetProperties(nullptr));
+    });
     return g_settings_sp;
 }
 

Modified: lldb/trunk/source/Target/Thread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Thread.cpp?rev=262053&r1=262052&r2=262053&view=diff
==============================================================================
--- lldb/trunk/source/Target/Thread.cpp (original)
+++ lldb/trunk/source/Target/Thread.cpp Fri Feb 26 13:38:18 2016
@@ -9,6 +9,7 @@
 
 // C Includes
 // C++ Includes
+#include <mutex>
 // Other libraries and framework includes
 // Project includes
 #include "lldb/Breakpoint/BreakpointLocation.h"
@@ -59,8 +60,11 @@ const ThreadPropertiesSP &
 Thread::GetGlobalProperties()
 {
     static ThreadPropertiesSP g_settings_sp;
-    if (!g_settings_sp)
-        g_settings_sp.reset (new ThreadProperties (true));
+    static std::once_flag g_once_flag;
+    std::call_once(g_once_flag,  []() {
+        if (!g_settings_sp)
+            g_settings_sp.reset (new ThreadProperties (true));
+    });
     return g_settings_sp;
 }
 




More information about the lldb-commits mailing list