glib r6571 - in trunk: . glib



Author: tml
Date: Sun Feb 24 01:46:42 2008
New Revision: 6571
URL: http://svn.gnome.org/viewvc/glib?rev=6571&view=rev

Log:
2008-02-24  Tor Lillqvist  <tml novell com>

	* glib/gmain.c (g_poll) [Win32]: Use alertable wait functions so
	that I/O completion routines or user-mode Asynchronous Procedure
	Calls can be run. (#517484, Vlad Grecescu)



Modified:
   trunk/ChangeLog
   trunk/glib/gmain.c

Modified: trunk/glib/gmain.c
==============================================================================
--- trunk/glib/gmain.c	(original)
+++ trunk/glib/gmain.c	Sun Feb 24 01:46:42 2008
@@ -426,18 +426,18 @@
 	  else
 	    {
 	      /* Wait for either message or event
-	       * -> Use MsgWaitForMultipleObjects
+	       * -> Use MsgWaitForMultipleObjectsEx
 	       */
 #ifdef G_MAIN_POLL_DEBUG
-	      g_print ("MsgWaitForMultipleObjects(%d, %d)\n", nhandles, timeout);
+	      g_print ("MsgWaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
 #endif
-	      ready = MsgWaitForMultipleObjects (nhandles, handles, FALSE,
-						 timeout, QS_ALLINPUT);
+	      ready = MsgWaitForMultipleObjectsEx (nhandles, handles, timeout,
+						   QS_ALLINPUT, MWMO_ALERTABLE);
 
 	      if (ready == WAIT_FAILED)
 		{
 		  gchar *emsg = g_win32_error_message (GetLastError ());
-		  g_warning (G_STRLOC ": MsgWaitForMultipleObjects() failed: %s", emsg);
+		  g_warning (G_STRLOC ": MsgWaitForMultipleObjectsEx() failed: %s", emsg);
 		  g_free (emsg);
 		}
 	    }
@@ -451,16 +451,16 @@
   else
     {
       /* Wait for just events
-       * -> Use WaitForMultipleObjects
+       * -> Use WaitForMultipleObjectsEx
        */
 #ifdef G_MAIN_POLL_DEBUG
-      g_print ("WaitForMultipleObjects(%d, %d)\n", nhandles, timeout);
+      g_print ("WaitForMultipleObjectsEx(%d, %d)\n", nhandles, timeout);
 #endif
-      ready = WaitForMultipleObjects (nhandles, handles, FALSE, timeout);
+      ready = WaitForMultipleObjectsEx (nhandles, handles, FALSE, timeout, TRUE);
       if (ready == WAIT_FAILED)
 	{
 	  gchar *emsg = g_win32_error_message (GetLastError ());
-	  g_warning (G_STRLOC ": WaitForMultipleObjects() failed: %s", emsg);
+	  g_warning (G_STRLOC ": WaitForMultipleObjectsEx() failed: %s", emsg);
 	  g_free (emsg);
 	}
     }
@@ -477,7 +477,8 @@
 
   if (ready == WAIT_FAILED)
     return -1;
-  else if (ready == WAIT_TIMEOUT)
+  else if (ready == WAIT_TIMEOUT ||
+	   ready == WAIT_IO_COMPLETION)
     return 0;
   else if (poll_msgs && ready == WAIT_OBJECT_0 + nhandles)
     {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]