* cygthread.cc (cygthread::terminate_thread): Wait briefly for notification
event in the event that the thread was actually in the process of exiting. * pipe.cc (fhandler_pipe::dup): read_state is not supposed to be inheritable. Fix that. * path.cc (path_conv::check): Set symlen = 0 to avoid a compiler warning. * devices.h (devices::parsedisk): Declare new function. * devices.in (devices::parsedisk): Define new function. * dtable.cc (dtable::init_std_file_from_handle): Use device numbers rather than name. * fhandler_proc.cc (format_proc_partitions): Use parsedisk to generate disk names from numeric codes. (This was broken on two of my systems previously and is still broken now)
This commit is contained in:
@@ -73,7 +73,7 @@ cygthread::stub (VOID *arg)
|
||||
info->func (info->arg == cygself ? info : info->arg);
|
||||
/* ...so the above should always return */
|
||||
|
||||
/* If stack_ptr is NULL, the above function has set that to indicate
|
||||
/* If func is NULL, the above function has set that to indicate
|
||||
that it doesn't want to alert anyone with a SetEvent and should
|
||||
just be marked as no longer inuse. Hopefully the function knows
|
||||
that it is doing. */
|
||||
@@ -175,10 +175,6 @@ cygthread::cygthread (LPTHREAD_START_ROUTINE start, LPVOID param,
|
||||
else
|
||||
{
|
||||
stack_ptr = NULL;
|
||||
#ifdef DEBUGGING
|
||||
if (__oldname)
|
||||
system_printf ("__oldname %s, terminated %d", __oldname, terminated);
|
||||
#endif
|
||||
h = CreateThread (&sec_none_nih, 0, is_freerange ? simplestub : stub,
|
||||
this, 0, &id);
|
||||
if (!h)
|
||||
@@ -272,6 +268,8 @@ cygthread::terminate_thread ()
|
||||
|
||||
(void) TerminateThread (h, 0);
|
||||
(void) WaitForSingleObject (h, INFINITE);
|
||||
if (ev)
|
||||
WaitForSingleObject (ev, 0);
|
||||
if (!inuse || exiting)
|
||||
return;
|
||||
|
||||
|
Reference in New Issue
Block a user