]> granicus.if.org Git - gc/commitdiff
2005-08-24 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Thu, 25 Aug 2005 13:48:41 +0000 (13:48 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 11:26:12 +0000 (15:26 +0400)
* win32_threads.c: If GC_INSIDE_DLL is defined, define the DllMain function for automatic registration
of threads with the GC.

* configure.in: Add an option for turning GC_INSIDE_DLL on.

svn path=/trunk/mono/; revision=48831

ChangeLog
configure.in
win32_threads.c

index f32a20cb9f426ac8a0df1cb3a6e3157c56281ed1..442378cf8cea4f3ca6c86587a7a6743247c89afd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2005-08-24  Zoltan Varga  <vargaz@gmail.com>
 
+       * win32_threads.c: If GC_INSIDE_DLL is defined, define the DllMain function for automatic registration
+       of threads with the GC.
+
+       * configure.in: Add an option for turning GC_INSIDE_DLL on.     
+
+2005-08-25  Zoltan Varga  <vargaz@freemail.hu>
+
        * solaris_threads.c (GC_thread_register_foreign): Add dummy implementation.
 
 Mon Aug 22 10:41:41 BST 2005 Paolo Molaro <lupus@ximian.com>
index 066f2d64993e5185100821a8e5e940d0d4302eea..2e57f2a649bcf00ad3dfef62da6bad282beb3896 100644 (file)
@@ -49,6 +49,10 @@ esac
 
 THREADS=$with_libgc_threads
 
+AC_ARG_ENABLE(win32-dllmain,
+[  --enable-win32-dllmain    Define the DllMain function in win32_threads.c even if the collector is not built as a dll],
+)
+
 AC_ARG_ENABLE(parallel-mark,
 [  --enable-parallel-mark      parallelize marking and free list construction],
    [case "$THREADS" in
@@ -169,6 +173,9 @@ case "$THREADS" in
     AC_DEFINE(GC_WIN32_THREADS)
     dnl Wine getenv may not return NULL for missing entry
     AC_DEFINE(NO_GETENV)
+       if test "${enable_win32_dllmain}" = yes; then
+          AC_DEFINE(GC_INSIDE_DLL)
+       fi
     ;;
  dgux386)
     THREADS=dgux386
index 681e1c2b82e85b8652403a21c41589176bef3089..3195094cc117ec39fcf0a84af0053c443dba8d7f 100644 (file)
@@ -74,7 +74,13 @@ extern LONG WINAPI GC_write_fault_handler(struct _EXCEPTION_POINTERS *exc_info);
 
 int GC_thread_is_registered (void)
 {
+#if defined(GC_DLL) || defined(GC_INSIDE_DLL)
+       /* Registered by DllMain */
        return 1;
+#else
+       /* FIXME: */
+       return 0;
+#endif
 }
 
 /*
@@ -753,7 +759,7 @@ int GC_pthread_detach(pthread_t thread)
  * We avoid acquiring locks here, since this doesn't seem to be preemptable.
  * Pontus Rydin suggests wrapping the thread start routine instead.
  */
-#ifdef GC_DLL
+#if defined(GC_DLL) || defined(GC_INSIDE_DLL)
 BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved)
 {
   switch (reason) {