summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Utility/SharedCluster.h24
1 files changed, 13 insertions, 11 deletions
diff --git a/lldb/include/lldb/Utility/SharedCluster.h b/lldb/include/lldb/Utility/SharedCluster.h
index 735f0c7ae97..991af4b4fa4 100644
--- a/lldb/include/lldb/Utility/SharedCluster.h
+++ b/lldb/include/lldb/Utility/SharedCluster.h
@@ -55,23 +55,26 @@ public:
{
delete m_objects[i];
}
+ // Decrement refcount should have been called on this ClusterManager,
+ // and it should have locked the mutex, now we will unlock it before
+ // we destroy it...
+ m_mutex.Unlock();
}
void ManageObject (T *new_object)
{
- m_mutex.Lock();
+ Mutex::Locker locker (m_mutex);
if (!ContainsObject(new_object))
m_objects.push_back (new_object);
- m_mutex.Unlock();
}
typename lldb_private::SharingPtr<T> GetSharedPointer(T *desired_object)
{
- m_mutex.Lock();
- m_external_ref++;
- assert (ContainsObject(desired_object));
- m_mutex.Unlock();
-
+ {
+ Mutex::Locker locker (m_mutex);
+ m_external_ref++;
+ assert (ContainsObject(desired_object));
+ }
return typename lldb_private::SharingPtr<T> (desired_object, new imp::shared_ptr_refcount<ClusterManager> (this));
}
@@ -79,10 +82,9 @@ private:
bool ContainsObject (const T *desired_object)
{
- typename std::vector<T *>::iterator pos;
- pos = std::find(m_objects.begin(), m_objects.end(), desired_object);
-
- return pos < m_objects.end();
+ typename std::vector<T *>::iterator pos, end = m_objects.end();
+ pos = std::find(m_objects.begin(), end, desired_object);
+ return pos != end;
}
void DecrementRefCount ()
OpenPOWER on IntegriCloud