From 1d442ab49d1cc955068932b578166cd0212898bf Mon Sep 17 00:00:00 2001 From: rth Date: Tue, 14 Sep 2004 20:09:31 +0000 Subject: [PATCH] * java/lang/natPosixProcess.cc (waitForSignal): Ignore return value of sigsuspend. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87505 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 5 +++++ libjava/java/lang/natPosixProcess.cc | 19 ++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) 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 () -- 2.11.4.GIT