Mercurial > emacs
changeset 6275:132464faeaf4
Don't kill remaining processes if child exits.
(call_process_exited): New variable.
(Fcall_process): Set it.
(call_process_cleanup): Test it.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 09 Mar 1994 22:10:08 +0000 |
parents | ec7e22ebd6b3 |
children | e76136b468b3 |
files | src/callproc.c |
diffstat | 1 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/callproc.c Wed Mar 09 06:52:12 1994 +0000 +++ b/src/callproc.c Wed Mar 09 22:10:08 1994 +0000 @@ -95,6 +95,13 @@ 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 @@ #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 @@ return Qnil; } + call_process_exited = 0; + #ifdef MSDOS /* MSDOS needs different cleanup information. */ record_unwind_protect (call_process_cleanup, @@ -417,6 +429,10 @@ 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)