diff options
author | Adam Megacz <adam@xwt.org> | 2002-02-07 03:56:40 +0000 |
---|---|---|
committer | Adam Megacz <megacz@gcc.gnu.org> | 2002-02-07 03:56:40 +0000 |
commit | b1d246853d409848c890a85bc0f45bbc75c9899d (patch) | |
tree | 6c3ed013c8e8ef078276d9712ba1ca29f2699f19 /boehm-gc | |
parent | b5ee195f1e3f11a5979841bedbf932926ffe5322 (diff) | |
download | gcc-b1d246853d409848c890a85bc0f45bbc75c9899d.zip gcc-b1d246853d409848c890a85bc0f45bbc75c9899d.tar.gz gcc-b1d246853d409848c890a85bc0f45bbc75c9899d.tar.bz2 |
gc.h: (GC_CreateThread) This function is now exposed on all Win32 platforms.
2002-02-06 Adam Megacz <adam@xwt.org>
* boehm-gc/include/gc.h: (GC_CreateThread) This function is
now exposed on all Win32 platforms.
* boehm-gc/win32_threads.c: (GC_CreateThread) This now
compiles on Win32; it invokes CreateThread() if GC is built
as a DLL; otherwise it registers the thread.
* boehm-gc/misc.c (GC_init): Initialize GC_allocate_ml in case
libgcjgc was not built as a DLL.
From-SVN: r49563
Diffstat (limited to 'boehm-gc')
-rw-r--r-- | boehm-gc/ChangeLog | 10 | ||||
-rw-r--r-- | boehm-gc/include/gc.h | 32 | ||||
-rw-r--r-- | boehm-gc/misc.c | 5 | ||||
-rw-r--r-- | boehm-gc/win32_threads.c | 15 |
4 files changed, 46 insertions, 16 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 90dfa7c..e167429 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,13 @@ +2002-02-06 Adam Megacz <adam@xwt.org> + + * boehm-gc/include/gc.h: (GC_CreateThread) This function is + now exposed on all Win32 platforms. + * boehm-gc/win32_threads.c: (GC_CreateThread) This now + compiles on Win32; it invokes CreateThread() if GC is built + as a DLL; otherwise it registers the thread. + * boehm-gc/misc.c (GC_init): Initialize GC_allocate_ml in case + libgcjgc was not built as a DLL. + 2002-02-01 Adam Megacz <adam@xwt.org> * boehm-gc on win32 now automatically detects if it is being built diff --git a/boehm-gc/include/gc.h b/boehm-gc/include/gc.h index 4692425..9e5447b0 100644 --- a/boehm-gc/include/gc.h +++ b/boehm-gc/include/gc.h @@ -849,10 +849,20 @@ extern void GC_thr_init(); /* Needed for Solaris/X86 */ #endif /* THREADS && !SRC_M3 */ -#if defined(GC_WIN32_THREADS) && defined(_WIN32_WCE) +#if defined(GC_WIN32_THREADS) # include <windows.h> /* + * All threads must be created using GC_CreateThread, so that they will be + * recorded in the thread table. + */ + HANDLE WINAPI GC_CreateThread( + LPSECURITY_ATTRIBUTES lpThreadAttributes, + DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, + LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); + +# if defined(_WIN32_WCE) + /* * win32_threads.c implements the real WinMain, which will start a new thread * to call GC_WinMain after initializing the garbage collector. */ @@ -862,21 +872,13 @@ extern void GC_thr_init(); /* Needed for Solaris/X86 */ LPWSTR lpCmdLine, int nCmdShow ); - /* - * All threads must be created using GC_CreateThread, so that they will be - * recorded in the thread table. - */ - HANDLE WINAPI GC_CreateThread( - LPSECURITY_ATTRIBUTES lpThreadAttributes, - DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, - LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); - -# ifndef GC_BUILD -# define WinMain GC_WinMain -# define CreateThread GC_CreateThread -# endif +# ifndef GC_BUILD +# define WinMain GC_WinMain +# define CreateThread GC_CreateThread +# endif +# endif /* defined(_WIN32_WCE) */ -#endif +#endif /* defined(GC_WIN32_THREADS) */ /* * If you are planning on putting diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c index 2bb93f3..06d7085 100644 --- a/boehm-gc/misc.c +++ b/boehm-gc/misc.c @@ -436,6 +436,11 @@ void GC_init() DCL_LOCK_STATE; DISABLE_SIGNALS(); + +#ifdef MSWIN32 + if (!GC_is_initialized) InitializeCriticalSection(&GC_allocate_ml); +#endif /* MSWIN32 */ + LOCK(); GC_init_inner(); UNLOCK(); diff --git a/boehm-gc/win32_threads.c b/boehm-gc/win32_threads.c index 533b6a4..33facbb 100644 --- a/boehm-gc/win32_threads.c +++ b/boehm-gc/win32_threads.c @@ -331,8 +331,18 @@ void GC_get_next_stack(char *start, char **lo, char **hi) if (*lo < start) *lo = start; } +#if !defined(MSWINCE) && !(defined(__MINGW32__) && !defined(_DLL)) -# ifdef MSWINCE +HANDLE WINAPI GC_CreateThread( + LPSECURITY_ATTRIBUTES lpThreadAttributes, + DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, + LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ) +{ + return CreateThread(lpThreadAttributes, dwStackSize, lpStartAddress, + lpParameter, dwCreationFlags, lpThreadId); +} + +#else /* !defined(MSWINCE) && !(defined(__MINGW32__) && !defined(_DLL)) typedef struct { HANDLE child_ready_h, parent_ready_h; @@ -450,6 +460,9 @@ static DWORD WINAPI thread_start(LPVOID arg) return ret; } +#endif /* !defined(MSWINCE) && !(defined(__MINGW32__) && !defined(_DLL)) + +#ifdef MSWINCE typedef struct { HINSTANCE hInstance; |