diff options
| author | rpj <rpj> | 2005-05-18 14:34:18 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2005-05-18 14:34:18 +0000 | 
| commit | 70fb72bb490c66f06cdab08ad656c4ce52c71448 (patch) | |
| tree | 513aa651f6589c9c3d30dde2d6c0c958c9339d0b | |
| parent | a10f66e68253f8296ea624ebc6b55cd75cd0ba79 (diff) | |
''
| -rw-r--r-- | ANNOUNCE | 2 | ||||
| -rw-r--r-- | NEWS | 4 | ||||
| -rw-r--r-- | pthread_win32_attach_detach_np.c | 7 | ||||
| -rw-r--r-- | ptw32_threadDestroy.c | 11 | ||||
| -rw-r--r-- | tests/Bmakefile | 2 | ||||
| -rw-r--r-- | tests/cancel9.c | 2 | ||||
| -rw-r--r-- | tests/detach1.c | 19 | 
7 files changed, 28 insertions, 19 deletions
| @@ -1,4 +1,4 @@ -	     PTHREADS-WIN32 RELEASE 2.5.0 (2005-05-09) +	     PTHREADS-WIN32 RELEASE 2.6.0 (2005-05-19)  	     -----------------------------------------  	 Web Site: http://sources.redhat.com/pthreads-win32/  	FTP Site: ftp://sources.redhat.com/pub/pthreads-win32 @@ -1,11 +1,11 @@  RELEASE 2.6.0  ------------- -(Not released yet) +(2005-05-19)  Bugs fixed  ---------- -* pthread_detach() now reclaims remaining thread resources when called after +* pthread_detach() now reclaims remaining thread resources if called after  the target thread has terminated. Previously, this routine did nothing in  this case. diff --git a/pthread_win32_attach_detach_np.c b/pthread_win32_attach_detach_np.c index d839c70..2b99d53 100644 --- a/pthread_win32_attach_detach_np.c +++ b/pthread_win32_attach_detach_np.c @@ -263,8 +263,6 @@ pthread_win32_thread_detach_np ()        if (sp != NULL) // otherwise Win32 thread with no implicit POSIX handle.  	{ -	  HANDLE threadH = sp->threadH; -  	  ptw32_callUserDestroyRoutines (sp->ptHandle);  	  (void) pthread_mutex_lock (&sp->cancelLock); @@ -279,11 +277,6 @@ pthread_win32_thread_detach_np ()  	    {  	      ptw32_threadDestroy (sp->ptHandle); -	      if (threadH != 0) -	        { -	          CloseHandle (threadH); -	        } -  	      TlsSetValue (ptw32_selfThreadKey->key, NULL);  	    }  	} diff --git a/ptw32_threadDestroy.c b/ptw32_threadDestroy.c index aa95e2c..eb9abfc 100644 --- a/ptw32_threadDestroy.c +++ b/ptw32_threadDestroy.c @@ -66,6 +66,17 @@ ptw32_threadDestroy (pthread_t thread)        (void) pthread_mutex_destroy(&threadCopy.cancelLock);        (void) pthread_mutex_destroy(&threadCopy.threadLock); + +#if ! defined (__MINGW32__) || defined (__MSVCRT__) || defined (__DMC__) +      /* +       * See documentation for endthread vs endthreadex. +       */ +      if (threadCopy.threadH != 0) +	{ +	  CloseHandle (threadCopy.threadH); +	} +#endif +      }  }				/* ptw32_threadDestroy */ diff --git a/tests/Bmakefile b/tests/Bmakefile index 682e956..b56c18f 100644 --- a/tests/Bmakefile +++ b/tests/Bmakefile @@ -63,7 +63,7 @@ BCXFLAGS	= -D__CLEANUP_C  CPLIB	= $(BCLIB)  CPDLL	= $(BCDLL) -CFLAGS= -q $(OPTIM) -w -tWC -tWM -w-aus -w-asc -w-par +CFLAGS= -q $(OPTIM) /D_WIN32_WINNT=0x400 -w -tWC -tWM -4 -w-aus -w-asc -w-par  LFLAGS=   INCLUDES=-I.  BUILD_DIR=.. diff --git a/tests/cancel9.c b/tests/cancel9.c index efa8ef2..b009161 100644 --- a/tests/cancel9.c +++ b/tests/cancel9.c @@ -97,7 +97,7 @@ test_udp (void *arg)      }    UDPSocket = socket (AF_INET, SOCK_DGRAM, 0); -  if (UDPSocket == -1) +  if ((int)UDPSocket == -1)      {        printf ("Server: socket ERROR \n");        exit (-1); diff --git a/tests/detach1.c b/tests/detach1.c index b0835c5..165c8c1 100644 --- a/tests/detach1.c +++ b/tests/detach1.c @@ -38,12 +38,17 @@  #include "test.h" + +enum { +  NUMTHREADS = 100 +}; +  void *  func(void * arg)  {      int i = (int) arg; -    Sleep(i * 100); +    Sleep(i * 10);      pthread_exit(arg); @@ -54,31 +59,31 @@ func(void * arg)  int  main(int argc, char * argv[])  { -	pthread_t id[4]; +	pthread_t id[NUMTHREADS];  	int i;  	/* Create a few threads and then exit. */ -	for (i = 0; i < 4; i++) +	for (i = 0; i < NUMTHREADS; i++)  	  {  	    assert(pthread_create(&id[i], NULL, func, (void *) i) == 0);  	  }  	/* Some threads will finish before they are detached, some after. */ -	Sleep(2 * 100 + 50); +	Sleep(NUMTHREADS/2 * 10 + 50); -	for (i = 0; i < 4; i++) +	for (i = 0; i < NUMTHREADS; i++)  	  {  	    assert(pthread_detach(id[i]) == 0);  	  } -	Sleep(6 * 100); +	Sleep(NUMTHREADS * 10 + 100);  	/*  	 * Check that all threads are now invalid.  	 * This relies on unique thread IDs - e.g. works with  	 * pthreads-w32 or Solaris, but may not work for Linux, BSD etc.  	 */ -	for (i = 0; i < 4; i++) +	for (i = 0; i < NUMTHREADS; i++)  	  {  	    assert(pthread_kill(id[i], 0) == ESRCH);  	  } | 
