summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-14 20:09:31 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-14 20:09:31 +0000
commit1d442ab49d1cc955068932b578166cd0212898bf (patch)
tree01aeb539a7cf89605b88803678a1dfa8d88ba69d /libjava
parent2219ac9e97649d4fddfa6725a28a12fcdf290c39 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--libjava/java/lang/natPosixProcess.cc19
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 ()