* cygthread.cc (cygthread::release): Reset ev here if it exists.
(cygthread::terminate_thread): Eliminat racy code which reset ev and thread_sync. Remove a few nonsensical inuse checks. Exit at the bottom. (cygthread::detach): Rewrite to again try to ensure that we don't say we're signalled when we are not signalled. * fhandler.cc (fhandler_base::raw_read): Revert to signalling read success quickly. * pipe.cc (fhandler_pipe::close): Use base method to close handle. * sigproc.h (WAIT_SIG_PRIORITY): Just trundle along at normal priority to allow the pipe thread to do its thing if possible. * pinfo.h (pinfo::zap_cwd): Declare new function. (pinfo::zap_cwd): Move 'cd out of the way code' here. (pinfo::exit): Use it here. * spawn.cc (spawn_guts): And here.
This commit is contained in:
@@ -123,6 +123,16 @@ pinfo::maybe_set_exit_code_from_windows ()
|
||||
self->pid, oexitcode, x, self->exitcode);
|
||||
}
|
||||
|
||||
void
|
||||
pinfo::zap_cwd ()
|
||||
{
|
||||
extern char windows_system_directory[];
|
||||
/* Move to an innocuous location to avoid a race with other processes
|
||||
that may want to manipulate the current directory before this
|
||||
process has completely exited. */
|
||||
(void) SetCurrentDirectory (windows_system_directory);
|
||||
}
|
||||
|
||||
void
|
||||
pinfo::exit (DWORD n)
|
||||
{
|
||||
@@ -144,11 +154,7 @@ pinfo::exit (DWORD n)
|
||||
|
||||
if (n != EXITCODE_NOSET)
|
||||
{
|
||||
extern char windows_system_directory[];
|
||||
/* Move to an innocuous location to avoid a race with other processes
|
||||
that may want to manipulate the current directory before this
|
||||
process has completely exited. */
|
||||
(void) SetCurrentDirectory (windows_system_directory);
|
||||
zap_cwd ();
|
||||
self->alert_parent (0); /* Shave a little time by telling our
|
||||
parent that we have now exited. */
|
||||
}
|
||||
|
Reference in New Issue
Block a user