aboutsummaryrefslogtreecommitdiff
path: root/boehm-gc
diff options
context:
space:
mode:
authorAdam Megacz <adam@xwt.org>2002-02-07 03:56:40 +0000
committerAdam Megacz <megacz@gcc.gnu.org>2002-02-07 03:56:40 +0000
commitb1d246853d409848c890a85bc0f45bbc75c9899d (patch)
tree6c3ed013c8e8ef078276d9712ba1ca29f2699f19 /boehm-gc
parentb5ee195f1e3f11a5979841bedbf932926ffe5322 (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--boehm-gc/include/gc.h32
-rw-r--r--boehm-gc/misc.c5
-rw-r--r--boehm-gc/win32_threads.c15
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;