Mercurial > emacs
changeset 76494:f0a25b5d3ba0
(Fdelete_process): Properly handle deletion of first element of
deleted_pid_list.
(create_process): Declare pid as pid_t.
(sigchld_handler): Avoid busyloop.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 17 Mar 2007 18:24:46 +0000 |
parents | e5e12c57c640 |
children | 761ce1f9a012 |
files | src/process.c |
diffstat | 1 files changed, 16 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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) {