From 0cd70866041cb69b52e51ac0a486e16aee3ae84a Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Mon, 9 Apr 2012 20:22:01 +0000 Subject: Work around a deadlocking issue where "SBDebugger::MemoryPressureDetected ()" is being called and is causing a deadlock. We now just try and get the lock when trying to trim down the unique modules so we don't deadlock debugger GUI programs until we can find the root cause. llvm-svn: 154339 --- lldb/source/Core/ModuleList.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'lldb/source/Core/ModuleList.cpp') diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp index 69245fb1a95..5e4f660dd28 100644 --- a/lldb/source/Core/ModuleList.cpp +++ b/lldb/source/Core/ModuleList.cpp @@ -112,9 +112,20 @@ ModuleList::Remove (const ModuleSP &module_sp) size_t -ModuleList::RemoveOrphans () +ModuleList::RemoveOrphans (bool mandatory) { - Mutex::Locker locker(m_modules_mutex); + Mutex::Locker locker; + + if (mandatory) + { + locker.Reset (m_modules_mutex.GetMutex()); + } + else + { + // Not mandatory, remove orphans if we can get the mutex + if (!locker.TryLock(m_modules_mutex.GetMutex())) + return 0; + } collection::iterator pos = m_modules.begin(); size_t remove_count = 0; while (pos != m_modules.end()) @@ -587,9 +598,9 @@ ModuleList::FindSharedModules (const ModuleSpec &module_spec, ModuleList &matchi } uint32_t -ModuleList::RemoveOrphanSharedModules () +ModuleList::RemoveOrphanSharedModules (bool mandatory) { - return GetSharedModuleList ().RemoveOrphans(); + return GetSharedModuleList ().RemoveOrphans(mandatory); } Error -- cgit v1.2.3