From 04df8ee55eb9a04783bc66c44d17ef36097e5a9b Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Fri, 26 Feb 2016 19:38:18 +0000 Subject: [PATCH] Make sure the Target, Process and Thread GetGlobalProperties() static methods are thread safe. llvm-svn: 262053 --- lldb/source/Target/Process.cpp | 8 ++++++-- lldb/source/Target/Target.cpp | 10 ++++++---- lldb/source/Target/Thread.cpp | 8 ++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 97951f4..4f4643d 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -9,6 +9,7 @@ // C Includes // C++ Includes +#include // 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; } diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index 7d3543c..9719457 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -9,6 +9,7 @@ // C Includes // C++ Includes +#include // 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; } diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp index f8daf08..5534ab4 100644 --- a/lldb/source/Target/Thread.cpp +++ b/lldb/source/Target/Thread.cpp @@ -9,6 +9,7 @@ // C Includes // C++ Includes +#include // 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; } -- 2.7.4