diff options
author | Mohan Embar <gnustuff@thisiscool.com> | 2004-09-11 19:13:51 +0000 |
---|---|---|
committer | Mohan Embar <membar@gcc.gnu.org> | 2004-09-11 19:13:51 +0000 |
commit | a0be84dd8c0a461050ab96d8c563c9e9482e0107 (patch) | |
tree | d727f36c523c4585200ec6eedd2eaf6e8968aede /libjava/win32-threads.cc | |
parent | bdbf6060ea5df98ab2a6cd4be0c99e347b65e737 (diff) | |
download | gcc-a0be84dd8c0a461050ab96d8c563c9e9482e0107.zip gcc-a0be84dd8c0a461050ab96d8c563c9e9482e0107.tar.gz gcc-a0be84dd8c0a461050ab96d8c563c9e9482e0107.tar.bz2 |
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 <windows.h>
#define _Jv_HaveCondDestroy
From-SVN: r87362
Diffstat (limited to 'libjava/win32-threads.cc')
-rw-r--r-- | libjava/win32-threads.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libjava/win32-threads.cc b/libjava/win32-threads.cc index 9e3981d..35a16cd 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()); } |