+2004-09-11 Mohan Embar <gnustuff@thisiscool.com>
+
+ 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
+
2004-09-11 Mohan Embar <gnustuff@thisiscool.com>
* java/lang/natThread.cc (finalize_native): Destroy
#ifndef __JV_WIN32_THREADS__
#define __JV_WIN32_THREADS__
+#define WIN32_LEAN_AND_MEAN
#include <windows.h>
//
// 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);
{
_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);
DeleteCriticalSection (&data->interrupt_mutex);
if (data->interrupt_event)
CloseHandle(data->interrupt_event);
+ CloseHandle(data->handle);
_Jv_Free(data);
}
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;
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());
}