mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 07:56:17 +01:00
Use alertable wait functions so that I/O completion routines or user-mode
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) svn path=/trunk/; revision=6571
This commit is contained in:
parent
811b86fa56
commit
6eb2b42715
@ -1,3 +1,9 @@
|
||||
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)
|
||||
|
||||
2008-02-24 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gwin32.c
|
||||
|
21
glib/gmain.c
21
glib/gmain.c
@ -426,18 +426,18 @@ g_poll (GPollFD *fds,
|
||||
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 @@ g_poll (GPollFD *fds,
|
||||
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 @@ g_poll (GPollFD *fds,
|
||||
|
||||
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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user