comparison src/process.c @ 76462:deede4f7067d

tweak last patch: add comment and avoid the first sleep
author Sam Steingold <sds@gnu.org>
date Sun, 11 Mar 2007 21:08:45 +0000
parents 720d443bce01
children e5e12c57c640 8c2ef9d5d4a8
comparison
equal deleted inserted replaced
76461:1192779764c1 76462:deede4f7067d
6493 #ifdef WNOHANG 6493 #ifdef WNOHANG
6494 #ifndef WUNTRACED 6494 #ifndef WUNTRACED
6495 #define WUNTRACED 0 6495 #define WUNTRACED 0
6496 #endif /* no WUNTRACED */ 6496 #endif /* no WUNTRACED */
6497 /* Keep trying to get a status until we get a definitive result. */ 6497 /* Keep trying to get a status until we get a definitive result. */
6498 do 6498 while (1) {
6499 { 6499 errno = 0;
6500 sleep (1); 6500 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6501 errno = 0; 6501 if (! (pid < 0 && errno == EINTR))
6502 pid = wait3 (&w, WNOHANG | WUNTRACED, 0); 6502 break;
6503 } 6503 /* avoid a busyloop: wait3 is a system call, so we do not want
6504 while (pid < 0 && errno == EINTR); 6504 to prevent the kernel from actually sending SIGCHLD to emacs
6505 by asking for it all the time */
6506 sleep (1);
6507 }
6505 6508
6506 if (pid <= 0) 6509 if (pid <= 0)
6507 { 6510 {
6508 /* PID == 0 means no processes found, PID == -1 means a real 6511 /* PID == 0 means no processes found, PID == -1 means a real
6509 failure. We have done all our job, so return. */ 6512 failure. We have done all our job, so return. */