test case demonstrating PeekMessage give up timeslices

Alexandre Julliard julliard at winehq.org
Wed Aug 3 03:36:08 CDT 2005

Jeremy White <jwhite at codeweavers.com> writes:

> However, this makes it clear to me that the yield
> in message.c is largely moot; you need to remove both
> that one and the one in ntdll/sync.c to have
> any material effect on Wine timing with messages.

Actually it should be enough to not yield in MsgWaitForMultipleObjects
when we are only checking for X events, and that would be correct IMO
since the check for X events is always in addition to the normal
behavior. Something like this should do it:

Index: dlls/x11drv/event.c
RCS file: /opt/cvs-commit/wine/dlls/x11drv/event.c,v
retrieving revision 1.56
diff -u -p -r1.56 event.c
--- dlls/x11drv/event.c	25 Jul 2005 11:08:43 -0000	1.56
+++ dlls/x11drv/event.c	3 Aug 2005 08:28:52 -0000
@@ -295,12 +295,13 @@ DWORD X11DRV_MsgWaitForMultipleObjectsEx
     if (process_events( data->display, mask )) ret = count;
-    else
+    else if (count || timeout)
         ret = WaitForMultipleObjectsEx( count+1, new_handles, flags & MWMO_WAITALL,
                                         timeout, flags & MWMO_ALERTABLE );
         if (ret == count) process_events( data->display, mask );
+    else ret = WAIT_TIMEOUT;
     return ret;

Alexandre Julliard
julliard at winehq.org

More information about the wine-devel mailing list