* 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:
		| @@ -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 | ||||
|   | ||||
| @@ -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 (); | ||||
|   | ||||
| @@ -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); | ||||
| 	} | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user