# HG changeset patch # User Sam Steingold # Date 1174791820 0 # Node ID 217f3f19f471ec5ac9d1833dce49261081561645 # Parent b0a30c2e9b9de64de72576bf495be504aa0b88e1 revert the last patch to the original fix: sleep BEFORE the first wait it appears to be absolutely necessary for prevention of the load surge diff -r b0a30c2e9b9d -r 217f3f19f471 src/process.c --- a/src/process.c Sat Mar 24 23:26:46 2007 +0000 +++ b/src/process.c Sun Mar 25 03:03:40 2007 +0000 @@ -6501,17 +6501,17 @@ #define WUNTRACED 0 #endif /* no WUNTRACED */ /* Keep trying to get a status until we get a definitive result. */ - while (1) - { + do + { + /* For some reason, this sleep() prevents Emacs from sending + loadavg to 5-8(!) for ~10 seconds. + See http://thread.gmane.org/gmane.emacs.devel/67722 or + http://www.google.com/search?q=busyloop+in+sigchld_handler */ + sleep (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 (pid < 0 && errno == EINTR); if (pid <= 0) {