summaryrefslogtreecommitdiffstats
path: root/libjava/java/lang/natPosixProcess.cc
diff options
context:
space:
mode:
authordaney <daney@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-18 15:12:32 +0000
committerdaney <daney@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-18 15:12:32 +0000
commit6437e383dae1a8d65865398cbbe557717a5a1c7a (patch)
tree3a0c85672202098b0c107df58f4a4415569c918c /libjava/java/lang/natPosixProcess.cc
parent78d4656884df0506df407e0f9aab9a77a9bf7063 (diff)
downloadppe42-gcc-6437e383dae1a8d65865398cbbe557717a5a1c7a.tar.gz
ppe42-gcc-6437e383dae1a8d65865398cbbe557717a5a1c7a.zip
2004-08-18 David Daney <ddaney@avtrex.com>
* java/lang/natPosixProcess.cc (waitForSignal): Use sigsuspend instead of sigwait. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86186 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/natPosixProcess.cc')
-rw-r--r--libjava/java/lang/natPosixProcess.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/libjava/java/lang/natPosixProcess.cc b/libjava/java/lang/natPosixProcess.cc
index f6b6f67baf5..a4b87c3a300 100644
--- a/libjava/java/lang/natPosixProcess.cc
+++ b/libjava/java/lang/natPosixProcess.cc
@@ -130,20 +130,22 @@ java::lang::ConcreteProcess$ProcessManager::waitForSignal ()
sigset_t mask;
// Wait for SIGCHLD
- sigemptyset (&mask);
- sigaddset (&mask, SIGCHLD);
+ 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);
- int sig;
- int c = sigwait (&mask, &sig);
-
- if (c != 0)
+ if (c != -1)
+ goto error;
+ if (errno != EINTR)
goto error;
// All OK.
return;
error:
- throw new InternalError (JvNewStringUTF (strerror (c)));
+ throw new InternalError (JvNewStringUTF (strerror (errno)));
}
jboolean java::lang::ConcreteProcess$ProcessManager::reap ()
OpenPOWER on IntegriCloud