# HG changeset patch # User Chong Yidong # Date 1174155886 0 # Node ID f0a25b5d3ba087807eee5fd0cc3fe56f78ca10d0 # Parent e5e12c57c6403c3bf105904330ad6d8e1853bfe5 (Fdelete_process): Properly handle deletion of first element of deleted_pid_list. (create_process): Declare pid as pid_t. (sigchld_handler): Avoid busyloop. diff -r e5e12c57c640 -r f0a25b5d3ba0 src/process.c --- a/src/process.c Sat Mar 17 18:16:03 2007 +0000 +++ b/src/process.c Sat Mar 17 18:24:46 2007 +0000 @@ -817,7 +817,7 @@ Lisp_Object symbol; /* Assignment to EMACS_INT stops GCC whining about limited range of data type. */ - EMACS_INT pid = p->pid;; + EMACS_INT pid = p->pid; /* No problem storing the pid here, as it is still in Vprocess_alist. */ deleted_pid_list = Fcons (make_fixnum_or_float (pid), @@ -830,7 +830,8 @@ if (CONSP (p->status)) symbol = XCAR (p->status); if (EQ (symbol, Qsignal) || EQ (symbol, Qexit)) - Fdelete (make_fixnum_or_float (pid), deleted_pid_list); + deleted_pid_list + = Fdelete (make_fixnum_or_float (pid), deleted_pid_list); else #endif { @@ -1818,7 +1819,8 @@ char **new_argv; Lisp_Object current_dir; { - int pid, inchannel, outchannel; + int inchannel, outchannel; + pid_t pid; int sv[2]; #ifdef POSIX_SIGNALS sigset_t procmask; @@ -6495,16 +6497,17 @@ #define WUNTRACED 0 #endif /* no WUNTRACED */ /* Keep trying to get a status until we get a definitive result. */ - while (1) { - errno = 0; - pid = wait3 (&w, WNOHANG | WUNTRACED, 0); - if (! (pid < 0 && errno == EINTR)) - break; - /* avoid a busyloop: wait3 is a system call, so we do not want - to prevent the kernel from actually sending SIGCHLD to emacs - by asking for it all the time */ - sleep (1); - } + while (1) + { + errno = 0; + pid = wait3 (&w, WNOHANG | WUNTRACED, 0); + if (! (pid < 0 && errno == EINTR)) + break; + /* Avoid a busyloop: wait3 is a system call, so we do not want + to prevent the kernel from actually sending SIGCHLD to emacs + by asking for it all the time. */ + sleep (1); + } if (pid <= 0) {