2009-09-24 Ivan Maidanski <ivmai@mail.ru>
authorivmai <ivmai>
Thu, 24 Sep 2009 11:54:47 +0000 (11:54 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:47 +0000 (21:06 +0400)
* win32_threads.c (GC_waitForSingleObjectInfinite): New static
function (only if GC_WINMAIN_REDIRECT).
* win32_threads.c (WinMain): Call GC_waitForSingleObjectInfinite()
thru GC_do_blocking() instead of calling WaitForSingleObject()
directly.

ChangeLog
win32_threads.c

index db703ab..a808e9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2009-09-24  Ivan Maidanski <ivmai@mail.ru>
 
+       * win32_threads.c (GC_waitForSingleObjectInfinite): New static
+       function (only if GC_WINMAIN_REDIRECT).
+       * win32_threads.c (WinMain): Call GC_waitForSingleObjectInfinite()
+       thru GC_do_blocking() instead of calling WaitForSingleObject()
+       directly.
+
+2009-09-24  Ivan Maidanski <ivmai@mail.ru>
+
        * pthread_support.c (start_mark_threads): Refine printed message.
        * win32_threads.c (GC_thr_init): Ditto.
        * win32_threads.c: Reformat some code pieces (wrap too long code
        adjusted) after start_mark_threads() call.
 
 2009-09-16  Ivan Maidanski <ivmai@mail.ru>
-       
+
        * Makefile.am: Back remove "GC_" prefix for PTHREADS,
        DARWIN_THREADS, WIN32_THREADS (for configure.ac).
 
        * include/private/gc_pmark.h: Ditto.
        * include/private/gcconfig.h: Ditto.
        * include/private/pthread_support.h: Ditto.
-       * include/private/thread_local_alloc.h: Ditto.  
+       * include/private/thread_local_alloc.h: Ditto.
        * darwin_stop_world.c: Add copyright header.
        * include/gc_backptr.h: Ditto.
        * include/gc_config_macros.h: Ditto.
index ee24d88..6b1dc7e 100644 (file)
@@ -2092,6 +2092,11 @@ static DWORD WINAPI main_thread_start(LPVOID arg)
                                args->lpCmdLine, args->nShowCmd);
 }
 
+static void * GC_waitForSingleObjectInfinite(void * handle)
+{
+    return (void *)(word)WaitForSingleObject((HANDLE)handle, INFINITE);
+}
+
 # ifndef WINMAIN_THREAD_STACK_SIZE
 #   define WINMAIN_THREAD_STACK_SIZE 0  /* default value */
 # endif
@@ -2118,7 +2123,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 
     if (thread_h != NULL)
     {
-        if (WaitForSingleObject (thread_h, INFINITE) == WAIT_FAILED)
+        if ((DWORD)(word)GC_do_blocking(GC_waitForSingleObjectInfinite,
+                                        (void *)thread_h) == WAIT_FAILED)
             ABORT("WaitForSingleObject(main_thread) failed");
         GetExitCodeThread (thread_h, &exit_code);
         CloseHandle (thread_h);