natPosixProcess.cc (waitForSignal): Ignore return value of sigsuspend.
authorRichard Henderson <rth@redhat.com>
Tue, 14 Sep 2004 20:09:31 +0000 (13:09 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 14 Sep 2004 20:09:31 +0000 (13:09 -0700)
        * java/lang/natPosixProcess.cc (waitForSignal): Ignore return
        value of sigsuspend.

From-SVN: r87505

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

index 39a17af3b5036528ccd8b2922081396e302ff097..2a3039e6e8dd17d52c37a4a860f33997508d9a0c 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-14  Richard Henderson  <rth@redhat.com>
+
+       * java/lang/natPosixProcess.cc (waitForSignal): Ignore return
+       value of sigsuspend.
+
 2004-09-12  Tom Tromey  <tromey@redhat.com>
 
        * javax/naming/CompoundName.java (CompoundName): Don't check for
index a4b87c3a30031135ffeb1e3f1685b045c980c272..cca768b6c6f53281ed21aec3cba23799438ca901 100644 (file)
@@ -126,26 +126,23 @@ error:
 void
 java::lang::ConcreteProcess$ProcessManager::waitForSignal ()
 {
-  using namespace java::lang;
-
-  sigset_t mask;
   // Wait for SIGCHLD
+  sigset_t mask;
   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);
+  sigsuspend (&mask);
 
-  if (c != -1)
-    goto error;
-  if (errno != EINTR)
-    goto error;
+  // Do not check sigsuspend return value.  The only legitimate return
+  // is EINTR, but there is a known kernel bug affecting alpha-linux
+  // wrt sigsuspend+handler+sigreturn that can result in a return value
+  // of __NR_sigsuspend and errno unset.  Don't fail unnecessarily on
+  // older kernel versions.
 
   // All OK.
   return;
-
-error:
-  throw new InternalError (JvNewStringUTF (strerror (errno)));
 }
 
 jboolean java::lang::ConcreteProcess$ProcessManager::reap ()