From: Richard M. Stallman Date: Wed, 9 Mar 1994 22:10:08 +0000 (+0000) Subject: Don't kill remaining processes if child exits. X-Git-Tag: emacs-19.34~9577 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=37d541216777cc32c18b7d5daef1c90999699806;p=emacs.git Don't kill remaining processes if child exits. (call_process_exited): New variable. (Fcall_process): Set it. (call_process_cleanup): Test it. --- diff --git a/src/callproc.c b/src/callproc.c index ae10f2f2012..04c2bdc7579 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -95,6 +95,13 @@ int synch_process_retcode; extern Lisp_Object Vdoc_file_name; +/* Clean up when exiting Fcall_process. + On MSDOS, delete the temporary file on any kind of termination. + On Unix, kill the process and any children on termination by signal. */ + +/* Nonzero if this is termination due to exit. */ +static int call_process_exited; + #ifndef VMS /* VMS version is in vmsproc.c. */ static Lisp_Object @@ -120,6 +127,9 @@ call_process_cleanup (fdpid) #else /* not MSDOS */ register int pid = XFASTINT (Fcdr (fdpid)); + if (call_process_exited) + return Qnil; + if (EMACS_KILLPG (pid, SIGINT) == 0) { int count = specpdl_ptr - specpdl; @@ -373,6 +383,8 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") return Qnil; } + call_process_exited = 0; + #ifdef MSDOS /* MSDOS needs different cleanup information. */ record_unwind_protect (call_process_cleanup, @@ -417,6 +429,10 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") set_buffer_internal (old); + /* Don't kill any children that the subprocess may have left behind + when exiting. */ + call_process_exited = 1; + unbind_to (count, Qnil); if (synch_process_death)