natPosixProcess.cc (waitForSignal): Use sigsuspend instead of sigwait.
authorDavid Daney <ddaney@avtrex.com>
Wed, 18 Aug 2004 15:12:32 +0000 (15:12 +0000)
committerDavid Daney <daney@gcc.gnu.org>
Wed, 18 Aug 2004 15:12:32 +0000 (15:12 +0000)
2004-08-18  David Daney  <ddaney@avtrex.com>

* java/lang/natPosixProcess.cc (waitForSignal): Use sigsuspend
instead of sigwait.

From-SVN: r86186

libjava/ChangeLog
libjava/java/lang/natPosixProcess.cc

index a5de0d47a8067890fd48b5191cd15c6f2578f37a..0fa156d48d5eb973487d91ece2092f515c7297b7 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-18  David Daney  <ddaney@avtrex.com>
+
+       * java/lang/natPosixProcess.cc (waitForSignal): Use sigsuspend 
+       instead of sigwait.
+
 2004-08-17  Michael Koch  <konqueror@gmx.de>
 
        * Makefile.am (AM_CXXFLAGS): Reformatted to make it more ease to read.
index f6b6f67baf57854e97ad55043ae1484e3371f8e5..a4b87c3a30031135ffeb1e3f1685b045c980c272 100644 (file)
@@ -130,20 +130,22 @@ java::lang::ConcreteProcess$ProcessManager::waitForSignal ()
 
   sigset_t mask;
   // Wait for SIGCHLD
-  sigemptyset (&mask);
-  sigaddset (&mask, SIGCHLD);
+  pthread_sigmask (0, NULL, &mask);
+  sigdelset (&mask, SIGCHLD);
+  // Use sigsuspend() instead of sigwait() as sigwait() doesn't play
+  // nicely with the GC's use of signals.
+  int c = sigsuspend (&mask);
 
-  int sig;
-  int c = sigwait (&mask, &sig);
-
-  if (c != 0)
+  if (c != -1)
+    goto error;
+  if (errno != EINTR)
     goto error;
 
   // All OK.
   return;
 
 error:
-  throw new InternalError (JvNewStringUTF (strerror (c)));
+  throw new InternalError (JvNewStringUTF (strerror (errno)));
 }
 
 jboolean java::lang::ConcreteProcess$ProcessManager::reap ()