KERNEL32: implement SignalObjectAndWait

Mike McCormack mike at codeweavers.com
Mon Apr 18 11:31:11 CDT 2005


ChangeLog:
* implement SignalObjectAndWait
-------------- next part --------------
Index: dlls/kernel/sync.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/sync.c,v
retrieving revision 1.76
diff -u -p -r1.76 sync.c
--- dlls/kernel/sync.c	18 Apr 2005 14:57:04 -0000	1.76
+++ dlls/kernel/sync.c	18 Apr 2005 16:31:17 -0000
@@ -284,12 +284,31 @@ BOOL WINAPI UnregisterWaitEx( HANDLE Wai
  * Allows to atomically signal any of the synchro objects (semaphore,
  * mutex, event) and wait on another.
  */
-DWORD WINAPI SignalObjectAndWait( HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, DWORD dwMilliseconds, BOOL bAlertable )
+DWORD WINAPI SignalObjectAndWait( HANDLE hObjectToSignal,
+            HANDLE hObjectToWaitOn, DWORD dwMilliseconds, BOOL bAlertable )
 {
-    FIXME("(%p %p %ld %d): stub\n",  hObjectToSignal, hObjectToWaitOn, dwMilliseconds, bAlertable);
-    return WAIT_OBJECT_0;
-}
+    NTSTATUS status;
+    LARGE_INTEGER timeout, *ptimeout = NULL;
+
+    TRACE("%p %p %ld %d\n", hObjectToSignal,
+          hObjectToWaitOn, dwMilliseconds, bAlertable);
 
+    if (dwMilliseconds != INFINITE)
+    {
+        timeout.QuadPart = dwMilliseconds * (ULONGLONG)10000;
+        timeout.QuadPart = -timeout.QuadPart;
+        ptimeout = &timeout;
+    }
+
+    status = NtSignalAndWaitForSingleObject( hObjectToSignal, hObjectToWaitOn,
+                                             bAlertable, ptimeout );
+    if (HIWORD(status))
+    {
+        SetLastError( RtlNtStatusToDosError(status) );
+        status = WAIT_FAILED;
+    }
+    return status;
+}
 
 /***********************************************************************
  *           InitializeCriticalSection   (KERNEL32.@)


More information about the wine-patches mailing list