diff options
Diffstat (limited to 'libjava/posix-threads.cc')
-rw-r--r-- | libjava/posix-threads.cc | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index 0643c1a5c7b..91da25cf38d 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -281,6 +281,17 @@ handle_intr (int) // Do nothing. } +static void +block_sigchld() +{ + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + int c = pthread_sigmask (SIG_BLOCK, &mask, NULL); + if (c != 0) + JvFail (strerror (c)); +} + void _Jv_InitThreads (void) { @@ -296,6 +307,10 @@ _Jv_InitThreads (void) sigemptyset (&act.sa_mask); act.sa_flags = 0; sigaction (INTR, &act, NULL); + + // Block SIGCHLD here to ensure that any non-Java threads inherit the new + // signal mask. + block_sigchld(); } _Jv_Thread_t * @@ -333,17 +348,6 @@ _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio) #endif } -static void -block_sigchld() -{ - sigset_t mask; - sigemptyset (&mask); - sigaddset (&mask, SIGCHLD); - int c = pthread_sigmask (SIG_BLOCK, &mask, NULL); - if (c != 0) - throw new java::lang::InternalError (JvNewStringUTF (strerror (c))); -} - void _Jv_ThreadRegister (_Jv_Thread_t *data) { |