summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBValue.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-05-20 23:51:26 +0000
committerGreg Clayton <gclayton@apple.com>2011-05-20 23:51:26 +0000
commit21c5ab4fe135ae4855f65de7ae07309747b57041 (patch)
treeec6197be476ebe5e264069431d82b7f84445ebd4 /lldb/source/API/SBValue.cpp
parent109b127e02cf6e233b59f72a5edc6d5c40a1fe0a (diff)
downloadbcm5719-llvm-21c5ab4fe135ae4855f65de7ae07309747b57041.tar.gz
bcm5719-llvm-21c5ab4fe135ae4855f65de7ae07309747b57041.zip
Lock the target API mutex correctly in all cases and make sure m_opaque_sp
contains a valid pointer before trying to access the target. llvm-svn: 131771
Diffstat (limited to 'lldb/source/API/SBValue.cpp')
-rw-r--r--lldb/source/API/SBValue.cpp64
1 files changed, 42 insertions, 22 deletions
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp
index 03ac1273b73..156f918f304 100644
--- a/lldb/source/API/SBValue.cpp
+++ b/lldb/source/API/SBValue.cpp
@@ -348,21 +348,20 @@ SBValue::GetChildAtIndex (uint32_t idx, lldb::DynamicValueType use_dynamic)
{
lldb::ValueObjectSP child_sp;
- if (m_opaque_sp->GetUpdatePoint().GetTarget())
- Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
-
if (m_opaque_sp)
{
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
child_sp = m_opaque_sp->GetChildAtIndex (idx, true);
- }
-
- if (use_dynamic != lldb::eNoDynamicValues)
- {
- if (child_sp)
+ if (use_dynamic != lldb::eNoDynamicValues)
{
- lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic);
- if (dynamic_sp)
- child_sp = dynamic_sp;
+ if (child_sp)
+ {
+ lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic);
+ if (dynamic_sp)
+ child_sp = dynamic_sp;
+ }
}
}
@@ -379,7 +378,12 @@ SBValue::GetIndexOfChildWithName (const char *name)
{
uint32_t idx = UINT32_MAX;
if (m_opaque_sp)
+ {
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
idx = m_opaque_sp->GetIndexOfChildWithName (ConstString(name));
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
{
@@ -404,22 +408,20 @@ SBValue::GetChildMemberWithName (const char *name, lldb::DynamicValueType use_dy
lldb::ValueObjectSP child_sp;
const ConstString str_name (name);
- if (m_opaque_sp->GetUpdatePoint().GetTarget())
- Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
-
if (m_opaque_sp)
{
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
child_sp = m_opaque_sp->GetChildMemberWithName (str_name, true);
- }
-
- if (use_dynamic_value != lldb::eNoDynamicValues)
- {
- if (child_sp)
+ if (use_dynamic_value != lldb::eNoDynamicValues)
{
- lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic_value);
- if (dynamic_sp)
- child_sp = dynamic_sp;
+ if (child_sp)
+ {
+ lldb::ValueObjectSP dynamic_sp = child_sp->GetDynamicValue (use_dynamic_value);
+ if (dynamic_sp)
+ child_sp = dynamic_sp;
+ }
}
}
@@ -439,7 +441,12 @@ SBValue::GetNumChildren ()
uint32_t num_children = 0;
if (m_opaque_sp)
+ {
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
num_children = m_opaque_sp->GetNumChildren();
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
@@ -455,6 +462,9 @@ SBValue::Dereference ()
SBValue sb_value;
if (m_opaque_sp)
{
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
Error error;
sb_value = m_opaque_sp->Dereference (error);
}
@@ -471,7 +481,12 @@ SBValue::TypeIsPointerType ()
bool is_ptr_type = false;
if (m_opaque_sp)
+ {
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
is_ptr_type = m_opaque_sp->IsPointerType();
+ }
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (log)
@@ -485,7 +500,12 @@ void *
SBValue::GetOpaqueType()
{
if (m_opaque_sp)
+ {
+ if (m_opaque_sp->GetUpdatePoint().GetTarget())
+ Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTarget()->GetAPIMutex());
+
return m_opaque_sp->GetClangType();
+ }
return NULL;
}
OpenPOWER on IntegriCloud