[PATCH 2/2] RegisterWaitForSingleObject() fix special tmo == 0 case.

Joakim Tjernlund Joakim.Tjernlund at transmode.se
Mon May 3 13:55:27 CDT 2010


At http://msdn.microsoft.com/en-us/library/aa332406%28VS.71%29.aspx one
can read:
"If the timeOutInterval parameter is not zero (0) and the executeOnlyOnce
parameter is false, the timer is reset every time the event is signaled
or the time-out interval elapses."

timeOutInterval == 0 makes the above false and the timer should NOT
be reset, fix that.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
---
 dlls/kernel32/sync.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index fbe055d..9d4b17b 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -212,6 +212,9 @@ BOOL WINAPI RegisterWaitForSingleObject(PHANDLE phNewWaitObject, HANDLE hObject,
     TRACE("%p %p %p %p %d %d\n",
           phNewWaitObject,hObject,Callback,Context,dwMilliseconds,dwFlags);

+    if (!dwMilliseconds) /* special case */
+        dwFlags |= WT_EXECUTEONLYONCE;
+
     status = RtlRegisterWait( phNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags );
     if (status != STATUS_SUCCESS)
     {
@@ -234,6 +237,9 @@ HANDLE WINAPI RegisterWaitForSingleObjectEx( HANDLE hObject,
     TRACE("%p %p %p %d %d\n",
           hObject,Callback,Context,dwMilliseconds,dwFlags);

+    if (!dwMilliseconds) /* special case */
+        dwFlags |= WT_EXECUTEONLYONCE;
+
     status = RtlRegisterWait( &hNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags );
     if (status != STATUS_SUCCESS)
     {
--
1.6.4.4





More information about the wine-patches mailing list