diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-14 20:09:31 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-14 20:09:31 +0000 |
commit | 1d442ab49d1cc955068932b578166cd0212898bf (patch) | |
tree | 01aeb539a7cf89605b88803678a1dfa8d88ba69d /libjava | |
parent | 2219ac9e97649d4fddfa6725a28a12fcdf290c39 (diff) | |
download | gcc-1d442ab49d1cc955068932b578166cd0212898bf.tar.gz |
* 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
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 5 | ||||
-rw-r--r-- | 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 <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 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 () |