mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 08:21:25 +00:00
Diagnostic for deadlocked threads
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@38722 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8c07ae4a05
commit
ec04844484
3 changed files with 20 additions and 4 deletions
|
@ -91,7 +91,7 @@
|
|||
}\
|
||||
if (EDEADLK == err)\
|
||||
{\
|
||||
_NSLockError(self, _cmd, YES);\
|
||||
_NSLockError(self, _cmd, YES, &_mutex);\
|
||||
}\
|
||||
}
|
||||
#define MLOCKBEFOREDATE \
|
||||
|
@ -132,10 +132,15 @@ static pthread_mutexattr_t attr_recursive;
|
|||
/*
|
||||
* OS X 10.5 compatibility function to allow debugging deadlock conditions.
|
||||
*/
|
||||
void _NSLockError(id obj, SEL _cmd, BOOL stop)
|
||||
void _NSLockError(id obj, SEL _cmd, BOOL stop, pthread_mutex_t *mutex)
|
||||
{
|
||||
#if defined(HAVE_PTHREAD_MUTEX_OWNER)
|
||||
NSLog(@"*** -[%@ %@]: deadlock (%@), held by thread %d", [obj class],
|
||||
NSStringFromSelector(_cmd), obj, mutex->__data.__owner);
|
||||
#else
|
||||
NSLog(@"*** -[%@ %@]: deadlock (%@)", [obj class],
|
||||
NSStringFromSelector(_cmd), obj);
|
||||
#endif
|
||||
NSLog(@"*** Break on _NSLockError() to debug.");
|
||||
if (YES == stop)
|
||||
pthread_mutex_lock(&deadlock);
|
||||
|
@ -215,7 +220,7 @@ MLOCK
|
|||
}
|
||||
if (EDEADLK == err)
|
||||
{
|
||||
_NSLockError(self, _cmd, NO);
|
||||
_NSLockError(self, _cmd, NO, &_mutex);
|
||||
}
|
||||
sched_yield();
|
||||
} while ([limit timeIntervalSinceNow] > 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue