diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-15 22:03:19 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-03-15 22:03:19 +0000 |
commit | 648fb7469753f7d785415f596c2b250c635db9ad (patch) | |
tree | 6ff411e4ce4a6ce8717905d98f2d63b7479a6539 /libjava/include/win32-threads.h | |
parent | 74636a3e7b0c19f83026989b46a3712f7691b320 (diff) | |
download | gcc-648fb7469753f7d785415f596c2b250c635db9ad.tar.gz |
2000-03-15 Tom Tromey <tromey@cygnus.com>
* java/io/natFileDescriptorWin32.cc (winerr): Now static.
* prims.cc (win32_exception_handler): Reformatted.
* include/win32-threads.h (_Jv_HaveCondDestroy): New define.
(_Jv_HaveMutexDestroy): Likewise.
2000-03-15 Jon Beniston <jb7216@bristol.ac.uk>
* java/io/natFileDescriptorWin32.cc: New file.
* java/io/natFileWin32.cc: New file.
* java/net/natInetAddress.cc: Added conditional inclusion of
Windows / Winsock headers.
* java/net/natPlainDatagramSocketImpl.cc: Added conditional
inclusion of Windows / Winsock headers.
* java/net/natPlainSocketImpl.cc: Added conditional inclusion of
Windows / Winsock headers.
* include/win32-signal.h: New file.
* include/win32-threads.h: New file.
* win32-threads.cc: New file.
* exception.cc (win32_get_restart_frame): New function.
* prims.cc (win32_exception_handler): New function.
(main_init) Performs Winsock initialisation.
(main_init) Installs exeception handler.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32567 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/include/win32-threads.h')
-rw-r--r-- | libjava/include/win32-threads.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/libjava/include/win32-threads.h b/libjava/include/win32-threads.h new file mode 100644 index 00000000000..d87fea07d2a --- /dev/null +++ b/libjava/include/win32-threads.h @@ -0,0 +1,138 @@ +// -*- c++ -*- +// win32-threads.h - Defines for using Win32 threads. + +/* Copyright (C) 1998, 1999, 2000 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_WIN32_THREADS__ +#define __JV_WIN32_THREADS__ + +#include <windows.h> + +// +// Typedefs. +// + +typedef HANDLE _Jv_ConditionVariable_t; +typedef HANDLE _Jv_Mutex_t; + +typedef struct +{ + int flags; // Flags are defined in implementation. + HANDLE handle; // Actual handle to the thread +} _Jv_Thread_t; + +typedef void _Jv_ThreadStartFunc (java::lang::Thread *); + +// +// Condition variables. +// + +inline void +_Jv_CondInit (_Jv_ConditionVariable_t *cv) +{ + *cv = CreateEvent (NULL, 0, 0, NULL); +} + +#define _Jv_HaveCondDestroy + +inline void +_Jv_CondDestroy (_Jv_ConditionVariable_t *cv) +{ + CloseHandle (*cv); + cv = NULL; +} + +int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, + jlong millis, jint nanos); + +inline int +_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +{ + return PulseEvent (*cv) ? 0 : GetLastError (); // FIXME: Map error code? +} + +inline int +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *) +{ + return PulseEvent (*cv) ? 0 : GetLastError (); // FIXME: Map error code? +} + +// +// Mutexes. +// + +inline void +_Jv_MutexInit (_Jv_Mutex_t *mu) +{ + *mu = CreateMutex (NULL, 0, NULL); +} + +#define _Jv_HaveMutexDestroy + +inline void +_Jv_MutexDestroy (_Jv_Mutex_t *mu) +{ + CloseHandle (*mu); + mu = NULL; +} + +int _Jv_MutexLock (_Jv_Mutex_t *mu); + +inline int +_Jv_MutexUnlock (_Jv_Mutex_t *mu) +{ + return ReleaseMutex(*mu) ? 0 : GetLastError(); // FIXME: Map error code? +} + +// +// Thread creation and manipulation. +// + +void _Jv_InitThreads (void); +void _Jv_ThreadInitData (_Jv_Thread_t **data, java::lang::Thread *thread); + +inline java::lang::Thread * +_Jv_ThreadCurrent (void) +{ + extern DWORD _Jv_ThreadKey; + return (java::lang::Thread *) TlsGetValue(_Jv_ThreadKey); +} + +inline _Jv_Thread_t * +_Jv_ThreadCurrentData (void) +{ + extern DWORD _Jv_ThreadDataKey; + return (_Jv_Thread_t *) TlsGetValue(_Jv_ThreadDataKey); +} + +inline void +_Jv_ThreadYield (void) +{ + Sleep (0); +} + +void _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio); +void _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, + _Jv_ThreadStartFunc *meth); +void _Jv_ThreadWait (void); +void _Jv_ThreadInterrupt (_Jv_Thread_t *data); + +// Remove defines from <windows.h> that conflict with various things in libgcj code + +#undef TRUE +#undef FALSE +#undef MAX_PRIORITY +#undef MIN_PRIORITY +#undef min +#undef max +#undef interface +#undef STRICT +#undef VOID + +#endif /* __JV_WIN32_THREADS__ */ |