* cygthread.h (cygthread::release): Just declare here.

* cygthread.cc (cygthread::release): Define here.  Use InterlockedExchange to
set inuse or suffer potential races.
(cygthread::terminate): Use release().
This commit is contained in:
Christopher Faylor 2004-12-22 16:19:27 +00:00
parent 1f490e5712
commit 9c0d960d7f
3 changed files with 18 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2004-12-22 Christopher Faylor <cgf@timesys.com>
* cygthread.h (cygthread::release): Just declare here.
* cygthread.cc (cygthread::release): Define here. Use
InterlockedExchange to set inuse or suffer potential races.
(cygthread::terminate): Use release().
2004-12-22 Chris January <chris@atomice.net>
* fhandler_process.cpp (format_process_status): Use tabs in formatting

View File

@ -213,6 +213,15 @@ cygthread::exit_thread ()
ExitThread (0);
}
void
cygthread::release ()
{
h = NULL;
__name = NULL;
stack_ptr = NULL;
(void) InterlockedExchange (&inuse, 0); /* No longer in use */
}
/* Forcibly terminate a thread. */
void
cygthread::terminate_thread ()
@ -242,12 +251,7 @@ cygthread::terminate_thread ()
if (is_freerange)
free (this);
else
{
h = NULL;
__name = NULL;
stack_ptr = NULL;
(void) InterlockedExchange (&inuse, 0); /* No longer in use */
}
release ();
}
/* Detach the cygthread from the current thread. Note that the

View File

@ -28,7 +28,7 @@ class cygthread
static DWORD WINAPI simplestub (VOID *);
static DWORD main_thread_id;
static const char * name (DWORD = 0);
void release () { __name = NULL; inuse = false; }
void release ();
cygthread (LPTHREAD_START_ROUTINE, LPVOID, const char *);
cygthread () {};
static void init ();