[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