Don't kill remaining processes if child exits.
(call_process_exited): New variable. (Fcall_process): Set it. (call_process_cleanup): Test it.
This commit is contained in:
parent
9f9d894124
commit
37d5412167
1 changed files with 16 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue