From: Richard Henderson Date: Tue, 14 Sep 2004 20:09:31 +0000 (-0700) Subject: natPosixProcess.cc (waitForSignal): Ignore return value of sigsuspend. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72826319ff3c180fd7c549a31b16167128c8945a;p=gcc.git natPosixProcess.cc (waitForSignal): Ignore return value of sigsuspend. * java/lang/natPosixProcess.cc (waitForSignal): Ignore return value of sigsuspend. From-SVN: r87505 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 39a17af3b50..2a3039e6e8d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2004-09-14 Richard Henderson + + * java/lang/natPosixProcess.cc (waitForSignal): Ignore return + value of sigsuspend. + 2004-09-12 Tom Tromey * javax/naming/CompoundName.java (CompoundName): Don't check for diff --git a/libjava/java/lang/natPosixProcess.cc b/libjava/java/lang/natPosixProcess.cc index a4b87c3a300..cca768b6c6f 100644 --- a/libjava/java/lang/natPosixProcess.cc +++ b/libjava/java/lang/natPosixProcess.cc @@ -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 ()