From 33b8ea2a147a3bf8f4617b0399cbb2b2dbbb6f9e Mon Sep 17 00:00:00 2001 From: tromey Date: Mon, 21 Aug 2006 22:07:30 +0000 Subject: boehm-gc PR libgcj/13212: * configure.ac: Check for pthread_getattr_np(). Remove GC_PTHREAD_SYM_VERSION detection. * include/gc.h (GC_register_my_thread, GC_unregister_my_thread, GC_get_thread_stack_base): New declarations. * pthread_support.c (GC_register_my_thread, GC_unregister_my_thread, GC_get_thread_stack_base): New functions. (GC_delete_thread): Don't try to free the first_thread. * misc.c (GC_init_inner): Use GC_get_thread_stack_base() if possible. (pthread_create_, constr): Removed. (pthread_create): Don't rename. * include/gc_ext_config.h.in: Rebuilt. * include/gc_pthread_redirects.h (pthread_create): Define unconditionally. * include/gc_config.h.in: Rebuilt. * configure: Rebuilt. libjava * java/lang/natThread.cc (_Jv_AttachCurrentThread): Attach thread to GC. (_Jv_DetachCurrentThread): Detach thread from GC. * include/boehm-gc.h (_Jv_GCAttachThread, _Jv_GCDetachThread): Declare. * boehm.cc (_Jv_GCAttachThread): New function. (_Jv_GCDetachThread): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116313 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 10 ++++++++++ libjava/boehm.cc | 18 ++++++++++++++++++ libjava/include/boehm-gc.h | 4 ++++ libjava/java/lang/natThread.cc | 6 +++++- 4 files changed, 37 insertions(+), 1 deletion(-) (limited to 'libjava') diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 1e3680f59c7..8c20e8c3365 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,13 @@ +2006-08-21 Bryce McKinlay + + * java/lang/natThread.cc (_Jv_AttachCurrentThread): Attach thread + to GC. + (_Jv_DetachCurrentThread): Detach thread from GC. + * include/boehm-gc.h (_Jv_GCAttachThread, _Jv_GCDetachThread): + Declare. + * boehm.cc (_Jv_GCAttachThread): New function. + (_Jv_GCDetachThread): Likewise. + 2006-08-19 Ranjit Mathew * sysdep/i386/backtrace.h (fallback_backtrace): Add "0x55 0x8B 0xEC" diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 6a5603d78a5..f96128e191d 100644 --- a/libjava/boehm.cc +++ b/libjava/boehm.cc @@ -695,3 +695,21 @@ _Jv_ResumeThread (_Jv_Thread_t *thread) GC_resume_thread (_Jv_GetPlatformThreadID (thread)); #endif } + +void +_Jv_GCAttachThread () +{ + // The registration interface is only defined on posixy systems and + // only actually works if pthread_getattr_np is defined. +#ifdef HAVE_PTHREAD_GETATTR_NP + GC_register_my_thread (); +#endif +} + +void +_Jv_GCDetachThread () +{ +#ifdef HAVE_PTHREAD_GETATTR_NP + GC_unregister_my_thread (); +#endif +} diff --git a/libjava/include/boehm-gc.h b/libjava/include/boehm-gc.h index 764b2a1d661..7e61b8e48fb 100644 --- a/libjava/include/boehm-gc.h +++ b/libjava/include/boehm-gc.h @@ -80,6 +80,10 @@ _Jv_AllocPtrFreeObj (jsize size, jclass klass); #endif /* LIBGCJ_GC_DEBUG */ +void _Jv_GCAttachThread (); + +void _Jv_GCDetachThread (); + // _Jv_AllocBytes (jsize size) should go here, too. But clients don't // usually include this header. diff --git a/libjava/java/lang/natThread.cc b/libjava/java/lang/natThread.cc index f778510bebd..facce30fa2e 100644 --- a/libjava/java/lang/natThread.cc +++ b/libjava/java/lang/natThread.cc @@ -410,7 +410,8 @@ _Jv_SetCurrentJNIEnv (JNIEnv *env) } // Attach the current native thread to an existing (but unstarted) Thread -// object. Returns -1 on failure, 0 upon success. +// object. Does not register thread with the garbage collector. +// Returns -1 on failure, 0 upon success. jint _Jv_AttachCurrentThread(java::lang::Thread* thread) { @@ -427,6 +428,8 @@ _Jv_AttachCurrentThread(java::lang::Thread* thread) java::lang::Thread* _Jv_AttachCurrentThread(jstring name, java::lang::ThreadGroup* group) { + // Register thread with GC before attempting any allocations. + _Jv_GCAttachThread (); java::lang::Thread *thread = _Jv_ThreadCurrent (); if (thread != NULL) return thread; @@ -461,6 +464,7 @@ _Jv_DetachCurrentThread (void) return -1; _Jv_ThreadUnRegister (); + _Jv_GCDetachThread (); // Release the monitors. t->finish_ (); -- cgit v1.2.3