diff -urp src.old/winsup/cygwin/thread.cc src/winsup/cygwin/thread.cc --- src.old/winsup/cygwin/thread.cc Wed Apr 24 10:14:14 2002 +++ src/winsup/cygwin/thread.cc Wed Apr 24 10:24:01 2002 @@ -909,7 +909,7 @@ thread_init_wrapper (void *_arg) TlsSetValue (MT_INTERFACE->thread_self_dwTlsIndex, thread); // if thread is detached force cleanup on exit - if (thread->attr.joinable == PTHREAD_CREATE_DETACHED) + if (thread->attr.joinable == PTHREAD_CREATE_DETACHED && thread->joiner == NULL) thread->joiner = __pthread_self(); #ifdef _CYG_THREAD_FAILSAFE @@ -1535,8 +1535,8 @@ __pthread_join (pthread_t *thread, void else { - (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED; (*thread)->joiner = joiner; + (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED; WaitForSingleObject ((*thread)->win32_obj_id, INFINITE); if (return_val) *return_val = (*thread)->return_ptr; @@ -1560,9 +1560,9 @@ __pthread_detach (pthread_t *thread) return EINVAL; } - (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED; // force cleanup on exit (*thread)->joiner = *thread; + (*thread)->attr.joinable = PTHREAD_CREATE_DETACHED; return 0; }