From: Adam Megacz Date: Thu, 7 Feb 2002 03:56:40 +0000 (+0000) Subject: gc.h: (GC_CreateThread) This function is now exposed on all Win32 platforms. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b1d246853d409848c890a85bc0f45bbc75c9899d;p=gcc.git gc.h: (GC_CreateThread) This function is now exposed on all Win32 platforms. 2002-02-06 Adam Megacz * 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 --- diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 90dfa7c14f4..e167429a413 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,13 @@ +2002-02-06 Adam Megacz + + * 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 * 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 46924251201..9e5447b0458 100644 --- a/boehm-gc/include/gc.h +++ b/boehm-gc/include/gc.h @@ -849,9 +849,19 @@ 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 + /* + * 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 2bb93f3dd57..06d7085d06e 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 533b6a4dd9e..33facbbaa10 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;