summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/spawn.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-01-22 21:47:04 +0000
committerChristopher Faylor <me@cgf.cx>2005-01-22 21:47:04 +0000
commitc75e4f09ec9ba7349554ed434777994e51ead740 (patch)
tree358aa56713e84dc5b09b35aaf1de1b414d4d8d39 /winsup/cygwin/spawn.cc
parent9a0b76dcedb80afc85f478e9ef6d11293fe581ed (diff)
downloadcygnal-c75e4f09ec9ba7349554ed434777994e51ead740.tar.gz
cygnal-c75e4f09ec9ba7349554ed434777994e51ead740.tar.bz2
cygnal-c75e4f09ec9ba7349554ed434777994e51ead740.zip
* 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.
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r--winsup/cygwin/spawn.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index 0c26ab23d..68a49f4fe 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -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);
}
}