<rdar://problem/11202426>

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
This commit is contained in:
Greg Clayton
2012-04-09 20:22:01 +00:00
parent 3ad11ff90f
commit 0cd7086604
5 changed files with 29 additions and 10 deletions

View File

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