Alexandre Julliard : ntoskrnl: Allow running user APC inside the device manager loop.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Mar 13 08:44:25 CDT 2015


Module: wine
Branch: master
Commit: c40239d989075cecb2a0f58dbe122f6db2d19cf3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c40239d989075cecb2a0f58dbe122f6db2d19cf3

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Mar 13 17:02:35 2015 +0900

ntoskrnl: Allow running user APC inside the device manager loop.

---

 dlls/ntoskrnl.exe/ntoskrnl.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 0ba26b2..95dcdc9 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -244,10 +244,15 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
             /* restart with larger buffer */
             break;
         case STATUS_PENDING:
-            if (WaitForMultipleObjects( 2, handles, FALSE, INFINITE ) == WAIT_OBJECT_0)
+            for (;;)
             {
-                HeapFree( GetProcessHeap(), 0, in_buff );
-                return STATUS_SUCCESS;
+                DWORD ret = WaitForMultipleObjectsEx( 2, handles, FALSE, INFINITE, TRUE );
+                if (ret == WAIT_OBJECT_0)
+                {
+                    HeapFree( GetProcessHeap(), 0, in_buff );
+                    return STATUS_SUCCESS;
+                }
+                if (ret != WAIT_IO_COMPLETION) break;
             }
             break;
         }




More information about the wine-cvs mailing list