[PATCH] minor pthread fixes

Thomas Pfaff tpfaff@gmx.net
Thu Apr 18 03:11:00 GMT 2002


This patch contains some small pthread fixes:

1. the pthread class allocated in __pthread_create never was freed. This
   resulted in a memory leak and an unclosed handle.
   Depending on the state of of the thread it is deleted now in
   __pthread_exit or __pthread_join
2. The InterlockedIncrement (&MT_INTERFACE->threadcount) in
   __pthread_create is misplaced. If the newly created thread terminates
   fast enough the threadcount will be decremented before it was
   incremented, which will result in an exit from __pthread_exit instead
   of an ExitThread.

Comments are very welcome, because i like to add more patches regarding
cancellation which is incomplete, a better mutex implementation (the
current one has only recursive mutexes and is slow on win9x) ... .

Thanks,
Thomas


2002-04-18  Thomas Pfaff  <tpfaff@gmx.net>

 	* thread.h (pthread::joiner): New member.
 	* thread.cc (pthread::pthread): Initialize joiner to NULL
	(pthread::create): Increment of thread counter moved from
	__pthread_create to this location.
	(__pthread_create): Increment thread counter removed.
	(thread_init_wrapper): Set joiner to self when thread was created
	detached.
	(__pthread_exit): delete thread when it is detached and not
	joined.
	(__pthread_join): Check for deadlock and delete thread when it has
	terminated.
	(__pthread_detach): Set joiner to self when thread state
	changed to detached.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pthread_fixes.patch
Type: application/octet-stream
Size: 3716 bytes
Desc: 
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20020418/1b11763a/attachment.obj>


More information about the Cygwin-patches mailing list