]> git.eshelyaron.com Git - emacs.git/commitdiff
Use `waitpid' to check if a process is still alive. The previous mechanism caused...
authorGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 17 Sep 2009 21:50:10 +0000 (23:50 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 17 Sep 2009 21:50:10 +0000 (23:50 +0200)
src/sysdep.c

index a9bdcc5afc74f2b76c640f6820ae05b5ef78382f..48343701823efa0950b04f409ea887ad2965cdb5 100644 (file)
@@ -432,6 +432,10 @@ wait_for_termination (pid)
        sigpause (SIGEMPTYMASK);
 #else /* not BSD_SYSTEM, and not HPUX version >= 6 */
 #ifdef POSIX_SIGNALS    /* would this work for GNU/Linux as well? */
+      int status;
+      int w;
+      /* XXX: can I replace this code without problems? --giuseppe
+
       sigblock (sigmask (SIGCHLD));
       errno = 0;
       if (kill (pid, 0) == -1 && errno == ESRCH)
@@ -441,6 +445,10 @@ wait_for_termination (pid)
        }
 
       sigsuspend (&empty_mask);
+*/
+      w = waitpid (pid, &status, WUNTRACED | WCONTINUED);
+      if (w == -1 || WIFEXITED (w))
+        break;
 #else /* not POSIX_SIGNALS */
 #ifdef HAVE_SYSV_SIGPAUSE
       sighold (SIGCHLD);