Make sure the Target, Process and Thread GetGlobalProperties() static methods are thread safe.

<rdar://problem/22595283>

llvm-svn: 262053
This commit is contained in:
Greg Clayton 2016-02-26 19:38:18 +00:00
parent 65ab102be3
commit 04df8ee55e
3 changed files with 18 additions and 8 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}