]> git.eshelyaron.com Git - emacs.git/commitdiff
revert the last patch to the original fix: sleep BEFORE the first wait
authorSam Steingold <sds@gnu.org>
Sun, 25 Mar 2007 03:03:40 +0000 (03:03 +0000)
committerSam Steingold <sds@gnu.org>
Sun, 25 Mar 2007 03:03:40 +0000 (03:03 +0000)
it appears to be absolutely necessary for prevention of the load surge

src/process.c

index 10bfa762a9b073e740ec992db134b01469becaa6..382db8b2578304c6c08c99cbd9c73059c224d794 100644 (file)
@@ -6501,17 +6501,17 @@ sigchld_handler (signo)
 #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)
        {