aboutsummaryrefslogtreecommitdiff
path: root/libjava/win32-threads.cc
diff options
context:
space:
mode:
authorMohan Embar <gnustuff@thisiscool.com>2004-09-11 19:13:51 +0000
committerMohan Embar <membar@gcc.gnu.org>2004-09-11 19:13:51 +0000
commita0be84dd8c0a461050ab96d8c563c9e9482e0107 (patch)
treed727f36c523c4585200ec6eedd2eaf6e8968aede /libjava/win32-threads.cc
parentbdbf6060ea5df98ab2a6cd4be0c99e347b65e737 (diff)
downloadgcc-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.cc5
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());
}