[2/2] ntdll: Do not check if object was signaled after user APC in server_select.

Sebastian Lackner sebastian at fds-team.de
Fri Oct 9 22:58:43 CDT 2015


Setting size to 0 is equivalent to SELECT_NONE as wait op.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
---

The change is not completely harmless ... if it is preferred to test it in
Staging for some time first, thats also fine.

 dlls/kernel32/tests/sync.c |    4 ----
 dlls/ntdll/server.c        |    3 ++-
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/dlls/kernel32/tests/sync.c b/dlls/kernel32/tests/sync.c
index 173793c..1065d5e 100644
--- a/dlls/kernel32/tests/sync.c
+++ b/dlls/kernel32/tests/sync.c
@@ -2317,20 +2317,16 @@ static DWORD WINAPI alertable_wait_thread(void *param)
 
     ReleaseSemaphore(semaphores[0], 1, NULL);
     result = WaitForMultipleObjectsEx(1, &semaphores[1], TRUE, 1000, TRUE);
-    todo_wine
     ok(result == WAIT_IO_COMPLETION, "expected WAIT_IO_COMPLETION, got %u\n", result);
     result = WaitForMultipleObjectsEx(1, &semaphores[1], TRUE, 200, TRUE);
-    todo_wine
     ok(result == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", result);
 
     ReleaseSemaphore(semaphores[0], 1, NULL);
     timeout.QuadPart = -10000000;
     status = pNtWaitForMultipleObjects(1, &semaphores[1], FALSE, TRUE, &timeout);
-    todo_wine
     ok(status == STATUS_USER_APC, "expected STATUS_USER_APC, got %08x\n", status);
     timeout.QuadPart = -2000000;
     status = pNtWaitForMultipleObjects(1, &semaphores[1], FALSE, TRUE, &timeout);
-    todo_wine
     ok(status == STATUS_WAIT_0, "expected STATUS_WAIT_0, got %08x\n", status);
 
     ReleaseSemaphore(semaphores[0], 1, NULL);
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 95111ad..f6457db 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -614,10 +614,11 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
         if (ret != STATUS_USER_APC) break;
         if (invoke_apc( &call, &result ))
         {
-            /* if we ran a user apc we have to check once more if an object got signaled,
+            /* if we ran a user apc we have to check once more if additional apcs are queued,
              * but we don't want to wait */
             abs_timeout = 0;
             user_apc = TRUE;
+            size = 0;
         }
 
         /* don't signal multiple times */
-- 
2.6.0



More information about the wine-patches mailing list