changeset 76718:217f3f19f471

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
author Sam Steingold <sds@gnu.org>
date Sun, 25 Mar 2007 03:03:40 +0000
parents b0a30c2e9b9d
children 7d51f6ae5d8a
files src/process.c
diffstat 1 files changed, 8 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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)
 	{