From 8c0dbf3490bd297d601118bc95a2a8640aa73a39 Mon Sep 17 00:00:00 2001 From: David Daney Date: Sat, 12 May 2007 17:37:55 +0000 Subject: re PR libgcj/29324 (add wait handling hook) PR libgcj/29324 * include/posix-threads.h (_Jv_BlockSigchld): Declare. (_Jv_UnBlockSigchld): Same. * posix-threads.cc: Include posix-threads.h. (block_sigchld) Rename to... (_Jv_BlockSigchld) ... this. (_Jv_UnBlockSigchld): New function. (_Jv_InitThreads): Call _Jv_BlockSigchld in place of block_sigchld. (_Jv_ThreadStart): Same. * java/lang/PosixProcess$ProcessManager.h: Regenerate. * java/lang/PosixProcess.java: Clean up imports. (ProcessManager): Make final. (ProcessManager.queue): Genericise and make private. (ProcessManager.pidToProcess): Remove. (ProcessManager.liveProcesses): New field. (ProcessManager.reaperPID): Remove. (ProcessManager.nativeData): New field. (ProcessManager.removeProcessFromMap): Remove. (ProcessManager.addProcessToMap):Remove. (ProcessManager.addToLiveProcesses): New method. (ProcessManager.run): Rewritten. (ProcessManager.reap): Change method signature, (getErrorStream): Correct formatting. (getInputStream): Same. (spawn): Add process to liveProcesses list. (pid): Make package private. * java/lang/PosixProcess.h: Regenerate. * java/lang/natPosixProcess.cc: Include posix.h and posix-threads.h. Add useing namespace java::lang. (ProcessManagerInternal): New struct. (sigchld_handler): Rewritten. (init): Rewritten. (waitForSignal): Same. (reap): Same. (signalReaper): Same. (nativeDestroy): Call kill as ::kill. (nativeSpawn): Correct formatting. * classpath/lib/java/lang/PosixProcess$EOFInputStream.class: Regenerate. * classpath/lib/java/lang/PosixProcess.class: Same. * classpath/lib/java/lang/PosixProcess$ProcessManager.class: Same. From-SVN: r124638 --- libjava/posix-threads.cc | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'libjava/posix-threads.cc') diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index 6ea724b3be8..287d6b79a6f 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -14,6 +14,7 @@ details. */ #include #include "posix.h" +#include "posix-threads.h" // If we're using the Boehm GC, then we need to override some of the // thread primitives. This is fairly gross. @@ -472,8 +473,8 @@ handle_intr (int) // Do nothing. } -static void -block_sigchld() +void +_Jv_BlockSigchld() { sigset_t mask; sigemptyset (&mask); @@ -483,6 +484,17 @@ block_sigchld() JvFail (strerror (c)); } +void +_Jv_UnBlockSigchld() +{ + sigset_t mask; + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + int c = pthread_sigmask (SIG_UNBLOCK, &mask, NULL); + if (c != 0) + JvFail (strerror (c)); +} + void _Jv_InitThreads (void) { @@ -501,7 +513,7 @@ _Jv_InitThreads (void) // Block SIGCHLD here to ensure that any non-Java threads inherit the new // signal mask. - block_sigchld(); + _Jv_BlockSigchld(); // Check/set the thread stack size. size_t min_ss = 32 * 1024; @@ -581,7 +593,7 @@ _Jv_ThreadRegister (_Jv_Thread_t *data) } # endif // Block SIGCHLD which is used in natPosixProcess.cc. - block_sigchld(); + _Jv_BlockSigchld(); } void @@ -629,7 +641,7 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, // Block SIGCHLD which is used in natPosixProcess.cc. // The current mask is inherited by the child thread. - block_sigchld(); + _Jv_BlockSigchld(); param.sched_priority = thread->getPriority(); -- cgit v1.2.1