The LLDB API (lldb::SB*) is now thread safe!
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@122262 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBValue.cpp b/source/API/SBValue.cpp
index 538324c..8161c95 100644
--- a/source/API/SBValue.cpp
+++ b/source/API/SBValue.cpp
@@ -23,6 +23,7 @@
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/StackFrame.h"
+#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/API/SBProcess.h"
@@ -135,12 +136,19 @@
}
bool
-SBValue::IsInScope (const SBFrame &frame)
+SBValue::IsInScope (const SBFrame &sb_frame)
{
bool result = false;
if (m_opaque_sp)
- result = m_opaque_sp->IsInScope (frame.get());
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ result = m_opaque_sp->IsInScope (frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
@@ -150,18 +158,25 @@
}
const char *
-SBValue::GetValue (const SBFrame &frame)
+SBValue::GetValue (const SBFrame &sb_frame)
{
const char *cstr = NULL;
- if ( m_opaque_sp)
- cstr = m_opaque_sp->GetValueAsCString (frame.get());
+ if (m_opaque_sp)
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ cstr = m_opaque_sp->GetValueAsCString (frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
{
if (cstr)
- log->Printf ("SBValue(%p)::GetValue (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), frame.get(), cstr);
+ log->Printf ("SBValue(%p)::GetValue (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), sb_frame.get(), cstr);
else
- log->Printf ("SBValue(%p)::GetValue (SBFrame(%p)) => NULL", m_opaque_sp.get(), frame.get());
+ log->Printf ("SBValue(%p)::GetValue (SBFrame(%p)) => NULL", m_opaque_sp.get(), sb_frame.get());
}
return cstr;
@@ -193,75 +208,110 @@
}
const char *
-SBValue::GetObjectDescription (const SBFrame &frame)
+SBValue::GetObjectDescription (const SBFrame &sb_frame)
{
const char *cstr = NULL;
if ( m_opaque_sp)
- cstr = m_opaque_sp->GetObjectDescription (frame.get());
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ cstr = m_opaque_sp->GetObjectDescription (frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
{
if (cstr)
- log->Printf ("SBValue(%p)::GetObjectDescription (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), frame.get(), cstr);
+ log->Printf ("SBValue(%p)::GetObjectDescription (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), sb_frame.get(), cstr);
else
- log->Printf ("SBValue(%p)::GetObjectDescription (SBFrame(%p)) => NULL", m_opaque_sp.get(), frame.get());
+ log->Printf ("SBValue(%p)::GetObjectDescription (SBFrame(%p)) => NULL", m_opaque_sp.get(), sb_frame.get());
}
return cstr;
}
bool
-SBValue::GetValueDidChange (const SBFrame &frame)
+SBValue::GetValueDidChange (const SBFrame &sb_frame)
{
bool result = false;
if (m_opaque_sp)
- result = m_opaque_sp->GetValueDidChange (frame.get());
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ result = m_opaque_sp->GetValueDidChange (frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
- log->Printf ("SBValue(%p)::GetValueDidChange (SBFrame(%p)) => %i", m_opaque_sp.get(), frame.get(), result);
+ log->Printf ("SBValue(%p)::GetValueDidChange (SBFrame(%p)) => %i", m_opaque_sp.get(), sb_frame.get(), result);
return result;
}
const char *
-SBValue::GetSummary (const SBFrame &frame)
+SBValue::GetSummary (const SBFrame &sb_frame)
{
const char *cstr = NULL;
if (m_opaque_sp)
- cstr = m_opaque_sp->GetSummaryAsCString(frame.get());
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ cstr = m_opaque_sp->GetSummaryAsCString(frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
{
if (cstr)
- log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), frame.get(), cstr);
+ log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), sb_frame.get(), cstr);
else
- log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => NULL", m_opaque_sp.get(), frame.get());
+ log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => NULL", m_opaque_sp.get(), sb_frame.get());
}
return cstr;
}
const char *
-SBValue::GetLocation (const SBFrame &frame)
+SBValue::GetLocation (const SBFrame &sb_frame)
{
const char *cstr = NULL;
if (m_opaque_sp)
- cstr = m_opaque_sp->GetLocationAsCString(frame.get());
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ cstr = m_opaque_sp->GetLocationAsCString(frame);
+ }
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
{
if (cstr)
- log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), frame.get(), cstr);
+ log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => \"%s\"", m_opaque_sp.get(), sb_frame.get(), cstr);
else
- log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => NULL", m_opaque_sp.get(), frame.get());
+ log->Printf ("SBValue(%p)::GetSummary (SBFrame(%p)) => NULL", m_opaque_sp.get(), sb_frame.get());
}
return cstr;
}
bool
-SBValue::SetValueFromCString (const SBFrame &frame, const char *value_str)
+SBValue::SetValueFromCString (const SBFrame &sb_frame, const char *value_str)
{
bool success = false;
if (m_opaque_sp)
- success = m_opaque_sp->SetValueFromCString (frame.get(), value_str);
+ {
+ StackFrame *frame = sb_frame.get();
+ if (frame)
+ {
+ Mutex::Locker api_locker (frame->GetThread().GetProcess().GetTarget().GetAPIMutex());
+ success = m_opaque_sp->SetValueFromCString (frame, value_str);
+ }
+ }
return success;
}
@@ -336,17 +386,6 @@
return num_children;
}
-bool
-SBValue::ValueIsStale ()
-{
- bool result = true;
-
- if (m_opaque_sp)
- result = m_opaque_sp->GetValueIsValid();
-
- return result;
-}
-
SBValue
SBValue::Dereference ()
@@ -354,8 +393,8 @@
SBValue sb_value;
if (m_opaque_sp)
{
- if (m_opaque_sp->IsPointerType())
- sb_value = GetChildAtIndex(0);
+ Error error;
+ sb_value = m_opaque_sp->Dereference (error);
}
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)