* spawn.cc (spawn_guts): Perform same "cd" as in pinfo::exit below to make sure

that a stub process does not keep the current working directory busy after the
"execed" process has exited.
This commit is contained in:
Christopher Faylor 2005-01-22 21:47:04 +00:00
parent 9a0b76dced
commit c75e4f09ec
3 changed files with 24 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2005-01-22 Christopher Faylor <cgf@timesys.com>
* spawn.cc (spawn_guts): Perform same "cd" as in pinfo::exit below to
make sure that a stub process does not keep the current working
directory busy after the "execed" process has exited.
2005-01-22 Christopher Faylor <cgf@timesys.com>
* pinfo.cc (pinfo::init): Move everything but the MapViewOfFileEx out

View File

@ -138,18 +138,20 @@ pinfo::exit (DWORD n)
fill_rusage (&r, hMainProc);
add_rusage (&self->rusage_self, &r);
/* The below call could be moved down two lines, but I like to see consistent
/* The below call could be moved down two lines, but this provides consistent
output from strace and the overhead should be extremely negligible. */
maybe_set_exit_code_from_windows ();
if (n != EXITCODE_NOSET)
{
/* Move to an innocuous location to avoid races with other processes
that may want to manipulate the current directory before this process
has completely exited. */
SetCurrentDirectory ("c:\\");
/* Shave a little time off by telling our parent that we have now
exited. */
self->alert_parent (0);
SetCurrentDirectory ("c:\\"); /* Move to an innocuous location to
avoid races with other processes
that may want to manipulate the
current directory before this process
has completely exited. */
self->alert_parent (0); /* Shave a little time by telling our
parent that we have now exited. */
}
int exitcode = self->exitcode;
release ();

View File

@ -809,9 +809,14 @@ spawn_guts (const char * prog_arg, const char *const *argv,
dup_proc_pipe essentially a no-op. */
if (myself->wr_proc_pipe)
{
/* Make sure that we own wr_proc_pipe just in case we've been
previously execed. */
myself->sync_proc_pipe ();
myself->sync_proc_pipe (); /* Make sure that we own wr_proc_pipe
just in case we've been previously
execed. */
SetCurrentDirectory ("c:\\"); /* Move to an innocuous location to
avoid races with other processes
that may want to manipulate the
current directory before this process
has completely exited. */
(void) myself->dup_proc_pipe (pi.hProcess);
}
}