Further patch by Vlad Grecescu: Drop the code path that called
authorTor Lillqvist <tml@novell.com>
Tue, 26 Feb 2008 17:26:28 +0000 (17:26 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Tue, 26 Feb 2008 17:26:28 +0000 (17:26 +0000)
2008-02-26  Tor Lillqvist  <tml@novell.com>

* glib/gmain.c (g_poll): Further patch by Vlad Grecescu: Drop
the code path that called WaitMessage(), as WaitMessage()
doesn't offer any chance for APCs to run. Instead just use the
code path with MsgWaitForMultipleObjectsEx() even for the
wait-only-for-messages case. (#517484)

svn path=/trunk/; revision=6597

ChangeLog
glib/gmain.c

index b894429b1cd0a9e996002f8eeed746bb2cc431ba..6027fe07146c38c2783df3d4f54d4b85ede84b2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-02-26  Tor Lillqvist  <tml@novell.com>
+
+       * glib/gmain.c (g_poll): Further patch by Vlad Grecescu: Drop the
+       code path that called WaitMessage(), as WaitMessage() doesn't
+       offer any chance for APCs to run. Instead just use the code path
+       with MsgWaitForMultipleObjectsEx() even for the
+       wait-only-for--messages case. (#517484)
+
 2008-02-25  Matthias Clasen  <mclasen@redhat.com>
 
        * configure.in: Bump version
index 8d1c900c24a13634abf413e1f9da3559bf9093d8..93ae0092aba380d837c6cb0f4a1fce6a8336b1ae 100644 (file)
@@ -328,7 +328,6 @@ g_poll (GPollFD *fds,
   GPollFD *f;
   DWORD ready;
   MSG msg;
-  UINT timer;
   gint nhandles = 0;
 
   for (f = fds; f < &fds[nfds]; ++f)
@@ -365,81 +364,20 @@ g_poll (GPollFD *fds,
        ready = WAIT_OBJECT_0 + nhandles;
       else
        {
-         if (nhandles == 0)
-           {
-             /* Waiting just for messages */
-             if (timeout == INFINITE)
-               {
-                 /* Infinite timeout
-                  * -> WaitMessage
-                  */
-#ifdef G_MAIN_POLL_DEBUG
-                 g_print ("WaitMessage\n");
-#endif
-                 if (!WaitMessage ())
-                   {
-                     gchar *emsg = g_win32_error_message (GetLastError ());
-                     g_warning (G_STRLOC ": WaitMessage() failed: %s", emsg);
-                     g_free (emsg);
-                   }
-                 ready = WAIT_OBJECT_0 + nhandles;
-               }
-             else if (timeout == 0)
-               {
-                 /* Waiting just for messages, zero timeout.
-                  * If we got here, there was no message
-                  */
-                 ready = WAIT_TIMEOUT;
-               }
-             else
-               {
-                 /* Waiting just for messages, some timeout
-                  * -> Set a timer, wait for message,
-                  * kill timer, use PeekMessage
-                  */
-                 timer = SetTimer (NULL, 0, timeout, NULL);
-                 if (timer == 0)
-                   {
-                     gchar *emsg = g_win32_error_message (GetLastError ());
-                     g_warning (G_STRLOC ": SetTimer() failed: %s", emsg);
-                     g_free (emsg);
-                     ready = WAIT_TIMEOUT;
-                   }
-                 else
-                   {
-#ifdef G_MAIN_POLL_DEBUG
-                     g_print ("WaitMessage\n");
-#endif
-                     WaitMessage ();
-                     KillTimer (NULL, timer);
-#ifdef G_MAIN_POLL_DEBUG
-                     g_print ("PeekMessage\n");
-#endif
-                     if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)
-                         && msg.message != WM_TIMER)
-                       ready = WAIT_OBJECT_0;
-                     else
-                       ready = WAIT_TIMEOUT;
-                   }
-               }
-           }
-         else
-           {
-             /* Wait for either message or event
-              * -> Use MsgWaitForMultipleObjectsEx
-              */
+         /* Wait for either message or event
+          * -> Use MsgWaitForMultipleObjectsEx
+          */
 #ifdef G_MAIN_POLL_DEBUG
-             g_print ("MsgWaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
+         g_print ("MsgWaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
 #endif
-             ready = MsgWaitForMultipleObjectsEx (nhandles, handles, timeout,
-                                                  QS_ALLINPUT, MWMO_ALERTABLE);
+         ready = MsgWaitForMultipleObjectsEx (nhandles, handles, timeout,
+                                              QS_ALLINPUT, MWMO_ALERTABLE);
 
-             if (ready == WAIT_FAILED)
-               {
-                 gchar *emsg = g_win32_error_message (GetLastError ());
-                 g_warning (G_STRLOC ": MsgWaitForMultipleObjectsEx() failed: %s", emsg);
-                 g_free (emsg);
-               }
+         if (ready == WAIT_FAILED)
+           {
+             gchar *emsg = g_win32_error_message (GetLastError ());
+             g_warning (G_STRLOC ": MsgWaitForMultipleObjectsEx() failed: %s", emsg);
+             g_free (emsg);
            }
        }
     }