* cygthread.cc (cygthread::release): Define here. Use InterlockedExchange to
set inuse or suffer potential races.
(cygthread::terminate): Use release().
+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
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 ()
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
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 ();