From a0be84dd8c0a461050ab96d8c563c9e9482e0107 Mon Sep 17 00:00:00 2001 From: Mohan Embar Date: Sat, 11 Sep 2004 19:13:51 +0000 Subject: [PATCH] re PR libgcj/14751 ([win32] thread creation leaks system handle resources) PR libgcj/14751 * win32-threads.cc (_Jv_ThreadInitData): Zero out thread handle in newly-allocated _Jv_Thread_t. (_Jv_ThreadDestroyData): Close thread handle. (_Jv_ThreadStart): Remove obsolete comment. Store handle of newly-created thread in _Jv_Thread_t. * include/win32-threads.h: #define WIN32_LEAN_AND_MEAN before including #define _Jv_HaveCondDestroy From-SVN: r87362 --- libjava/ChangeLog | 12 ++++++++++++ libjava/include/win32-threads.h | 2 ++ libjava/win32-threads.cc | 5 +++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index d3a6cea9bba..cc796b163fe 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,15 @@ +2004-09-11 Mohan Embar + + PR libgcj/14751 + * win32-threads.cc (_Jv_ThreadInitData): Zero out thread + handle in newly-allocated _Jv_Thread_t. + (_Jv_ThreadDestroyData): Close thread handle. + (_Jv_ThreadStart): Remove obsolete comment. + Store handle of newly-created thread in _Jv_Thread_t. + * include/win32-threads.h: #define WIN32_LEAN_AND_MEAN + before including + #define _Jv_HaveCondDestroy + 2004-09-11 Mohan Embar * java/lang/natThread.cc (finalize_native): Destroy diff --git a/libjava/include/win32-threads.h b/libjava/include/win32-threads.h index fdd21c541b4..ba9def10d68 100644 --- a/libjava/include/win32-threads.h +++ b/libjava/include/win32-threads.h @@ -13,6 +13,7 @@ details. */ #ifndef __JV_WIN32_THREADS__ #define __JV_WIN32_THREADS__ +#define WIN32_LEAN_AND_MEAN #include // @@ -75,6 +76,7 @@ typedef void _Jv_ThreadStartFunc (java::lang::Thread *); // Condition variables. // +#define _Jv_HaveCondDestroy int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos); void _Jv_CondInit (_Jv_ConditionVariable_t *cv); void _Jv_CondDestroy (_Jv_ConditionVariable_t *cv); diff --git a/libjava/win32-threads.cc b/libjava/win32-threads.cc index 9e3981db3dd..35a16cdb6ac 100644 --- a/libjava/win32-threads.cc +++ b/libjava/win32-threads.cc @@ -262,6 +262,7 @@ _Jv_ThreadInitData (java::lang::Thread* obj) { _Jv_Thread_t *data = (_Jv_Thread_t*)_Jv_Malloc(sizeof(_Jv_Thread_t)); data->flags = 0; + data->handle = 0; data->thread_obj = obj; data->interrupt_event = 0; InitializeCriticalSection (&data->interrupt_mutex); @@ -275,6 +276,7 @@ _Jv_ThreadDestroyData (_Jv_Thread_t *data) DeleteCriticalSection (&data->interrupt_mutex); if (data->interrupt_event) CloseHandle(data->interrupt_event); + CloseHandle(data->handle); _Jv_Free(data); } @@ -365,7 +367,6 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, _Jv_ThreadStart return; data->flags |= FLAG_START; - // FIXME: handle marking the info object for GC. info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); info->method = meth; info->data = data; @@ -379,7 +380,7 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, _Jv_ThreadStart else data->flags |= FLAG_DAEMON; - GC_CreateThread(NULL, 0, really_start, info, 0, &id); + data->handle = GC_CreateThread(NULL, 0, really_start, info, 0, &id); _Jv_ThreadSetPriority(data, thread->getPriority()); } -- 2.30.2