]> granicus.if.org Git - gc/commitdiff
gc_init() is a better place for this warning
authorJohannes Totz <jtotz@ic.ac.uk>
Mon, 24 Jan 2011 18:11:52 +0000 (18:11 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 11 May 2015 15:57:42 +0000 (18:57 +0300)
Conflicts:

misc.c
win32_threads.c

misc.c

diff --git a/misc.c b/misc.c
index 6c01404e33af17c3cd4be1d0b8871a20f70749e5..8145890f82f818ad415321af12fd8fa6c3289733 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -852,6 +852,33 @@ GC_API void GC_CALL GC_init(void)
 #   else
       initial_heap_sz = (word)MINHINCR;
 #   endif
+
+#ifdef GC_DEBUG
+#ifndef _WIN64
+      {
+            // wow64: running 32-bit-gc on 64-bit-sys is broken!
+            // code copied from msdn docs example
+            typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
+            LPFN_ISWOW64PROCESS fnIsWow64Process = 0;
+            fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandleA("kernel32"), "IsWow64Process");
+            if (NULL != fnIsWow64Process)
+            {
+                BOOL bIsWow64 = FALSE;
+                if (fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
+                {
+                    if (bIsWow64)
+                        MessageBoxA(NULL,
+                            "This program uses the BDWGC garbage collector compiled for 32-bit "
+                            "but running on a 64-bit version of Windows.\n"
+                            "This is known to be broken due to a design flaw in Windows itself! Expect erratic behaviour...",
+                            "32-bit program running on 64-bit system",
+                            MB_ICONWARNING | MB_OK);
+                }
+            }
+      }
+#endif
+#endif
+
     DISABLE_CANCEL(cancel_state);
     /* Note that although we are nominally called with the */
     /* allocation lock held, the allocation lock is now    */