prims.cc (_Jv_CreateJavaVM): Add comment about initialization order.

2005-02-15  David Daney <ddaney@avtrex.com>
            Bryce McKinlay  <mckinlay@redhat.com>

	* prims.cc (_Jv_CreateJavaVM): Add comment about initialization order.
	* posix-threads.cc (_Jv_InitThreads): Call block_sigchld() here to
	ensure that GC threads inherit the new signal mask.
	(block_sigchld): Call JvFail rather than throwing exception if
	pthread_sigmask() fails.

Co-Authored-By: Bryce McKinlay <mckinlay@redhat.com>

From-SVN: r95095
This commit is contained in:
David Daney 2005-02-16 04:16:06 +00:00 committed by Bryce McKinlay
parent 5909b0346c
commit 7e9534bc54
3 changed files with 26 additions and 11 deletions

View File

@ -1,3 +1,12 @@
2005-02-15 David Daney <ddaney@avtrex.com>
Bryce McKinlay <mckinlay@redhat.com>
* prims.cc (_Jv_CreateJavaVM): Add comment about initialization order.
* posix-threads.cc (_Jv_InitThreads): Call block_sigchld() here to
ensure that GC threads inherit the new signal mask.
(block_sigchld): Call JvFail rather than throwing exception if
pthread_sigmask() fails.
2005-02-15 Mark Wielaard <mark@klomp.org> 2005-02-15 Mark Wielaard <mark@klomp.org>
* java/util/jar/Attributes.java (Name.CLASS_PATH): Document that * java/util/jar/Attributes.java (Name.CLASS_PATH): Document that

View File

@ -281,6 +281,17 @@ handle_intr (int)
// Do nothing. // 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 void
_Jv_InitThreads (void) _Jv_InitThreads (void)
{ {
@ -296,6 +307,10 @@ _Jv_InitThreads (void)
sigemptyset (&act.sa_mask); sigemptyset (&act.sa_mask);
act.sa_flags = 0; act.sa_flags = 0;
sigaction (INTR, &act, NULL); sigaction (INTR, &act, NULL);
// Block SIGCHLD here to ensure that any non-Java threads inherit the new
// signal mask.
block_sigchld();
} }
_Jv_Thread_t * _Jv_Thread_t *
@ -333,17 +348,6 @@ _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio)
#endif #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 void
_Jv_ThreadRegister (_Jv_Thread_t *data) _Jv_ThreadRegister (_Jv_Thread_t *data)
{ {

View File

@ -921,6 +921,8 @@ _Jv_CreateJavaVM (void* /*vm_args*/)
PROCESS_GCJ_PROPERTIES; PROCESS_GCJ_PROPERTIES;
/* Threads must be initialized before the GC, so that it inherits the
signal mask. */
_Jv_InitThreads (); _Jv_InitThreads ();
_Jv_InitGC (); _Jv_InitGC ();
_Jv_InitializeSyncMutex (); _Jv_InitializeSyncMutex ();