Robert Shearman : ole32: Don' t loop while peeking messages in CoWaitForMultipleHandles.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 13 10:12:32 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 11c1bcf6def5f7fe8e5588c71a28fb237fe9af9c
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=11c1bcf6def5f7fe8e5588c71a28fb237fe9af9c

Author: Robert Shearman <rob at codeweavers.com>
Date:   Thu Jul 13 13:07:13 2006 +0100

ole32: Don't loop while peeking messages in CoWaitForMultipleHandles.

It increases the latency on completing the COM call and could result in 
the COM call never completing in some circumstances.

---

 dlls/ole32/compobj.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index a25d9ec..4efa235 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -2875,7 +2875,12 @@ HRESULT WINAPI CoWaitForMultipleHandles(
             if (res == WAIT_OBJECT_0 + cHandles)  /* messages available */
             {
                 MSG msg;
-                while (COM_PeekMessage(apt, &msg))
+
+                /* note: using "if" here instead of "while" might seem less
+                 * efficient, but only if we are optimising for quick delivery
+                 * of pending messages, rather than quick completion of the
+                 * COM call */
+                if (COM_PeekMessage(apt, &msg))
                 {
                     /* FIXME: filter the messages here */
                     TRACE("received message whilst waiting for RPC: 0x%04x\n", msg.message);
@@ -2887,7 +2892,6 @@ HRESULT WINAPI CoWaitForMultipleHandles(
                         PostQuitMessage(msg.wParam);
                         /* no longer need to process messages */
                         message_loop = FALSE;
-                        break;
                     }
                 }
                 continue;




More information about the wine-cvs mailing list