From 1d442ab49d1cc955068932b578166cd0212898bf Mon Sep 17 00:00:00 2001 From: rth Date: Tue, 14 Sep 2004 20:09:31 +0000 Subject: * 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/java/lang/natPosixProcess.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'libjava/java/lang/natPosixProcess.cc') 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 () -- cgit v1.2.3