windows fixup for pthread exit with null pointer

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@39935 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2016-06-27 20:21:11 +00:00
parent 7f0fc86fc7
commit fda234553c

View file

@ -569,6 +569,17 @@ static void exitedThread(void *thread)
{ {
NSValue *ref; NSValue *ref;
if (0 == thread)
{
/* On some systems this is called with a null thread pointer,
* so try to ger the NSThread object for the current thread.
*/
thread = pthread_getspecific(thread_object_key);
if (0 == thread)
{
return; // no thread info
}
}
RETAIN((NSThread*)thread); RETAIN((NSThread*)thread);
ref = NSValueCreateFromPthread(pthread_self()); ref = NSValueCreateFromPthread(pthread_self());
_willLateUnregisterThread(ref, (NSThread*)thread); _willLateUnregisterThread(ref, (NSThread*)thread);
@ -810,7 +821,7 @@ unregisterActiveThread(NSThread *thread)
t = GSCurrentThread(); t = GSCurrentThread();
if (t->_active == YES) if (t->_active == YES)
{ {
unregisterActiveThread (t); unregisterActiveThread(t);
if (t == defaultThread || defaultThread == nil) if (t == defaultThread || defaultThread == nil)
{ {
@ -1742,7 +1753,7 @@ GSRunLoopInfoForThread(NSThread *aThread)
* </p> * </p>
*/ */
BOOL BOOL
GSRegisterCurrentThread (void) GSRegisterCurrentThread(void)
{ {
return [NSThread _createThreadForCurrentPthread]; return [NSThread _createThreadForCurrentPthread];
} }
@ -1762,7 +1773,7 @@ GSRegisterCurrentThread (void)
* </p> * </p>
*/ */
void void
GSUnregisterCurrentThread (void) GSUnregisterCurrentThread(void)
{ {
unregisterActiveThread(GSCurrentThread()); unregisterActiveThread(GSCurrentThread());
} }