Module: wine Branch: refs/heads/master Commit: 98fd541de84c71496e773f3990ae1a139feb2e18 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=98fd541de84c71496e773f39...
Author: Bryan Mayland bmayland@leoninedev.com Date: Tue Mar 21 16:45:40 2006 -0500
kernel: WaitForMultipleObjectsEx should accept up to MAXIMUM_WAIT_OBJECTS.
---
dlls/kernel/sync.c | 2 +- dlls/kernel/tests/sync.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c index 5a2535e..cec44f5 100644 --- a/dlls/kernel/sync.c +++ b/dlls/kernel/sync.c @@ -173,7 +173,7 @@ DWORD WINAPI WaitForMultipleObjectsEx( D HANDLE hloc[MAXIMUM_WAIT_OBJECTS]; unsigned int i;
- if (count >= MAXIMUM_WAIT_OBJECTS) + if (count > MAXIMUM_WAIT_OBJECTS) { SetLastError(ERROR_INVALID_PARAMETER); return WAIT_FAILED; diff --git a/dlls/kernel/tests/sync.c b/dlls/kernel/tests/sync.c index 6d7bc88..a7f6408 100644 --- a/dlls/kernel/tests/sync.c +++ b/dlls/kernel/tests/sync.c @@ -31,7 +31,8 @@ static void test_signalandwait(void) DWORD (WINAPI *pSignalObjectAndWait)(HANDLE, HANDLE, DWORD, BOOL); HMODULE kernel32; DWORD r; - HANDLE event[2], semaphore[2], file; + int i; + HANDLE event[2], maxevents[MAXIMUM_WAIT_OBJECTS], semaphore[2], file;
kernel32 = GetModuleHandle("kernel32"); pSignalObjectAndWait = (void*) GetProcAddress(kernel32, "SignalObjectAndWait"); @@ -83,6 +84,18 @@ static void test_signalandwait(void) CloseHandle(event[0]); CloseHandle(event[1]);
+ /* create the maximum number of events and make sure + * we can wait on that many */ + for (i=0; i<MAXIMUM_WAIT_OBJECTS; i++) + { + maxevents[i] = CreateEvent(NULL, 1, 1, NULL); + ok( maxevents[i] != 0, "should create enough events\n"); + } + r = WaitForMultipleObjects(MAXIMUM_WAIT_OBJECTS, maxevents, 0, 0); + ok( r != WAIT_FAILED && r != WAIT_TIMEOUT, "should succeed\n"); + + for (i=0; i<MAXIMUM_WAIT_OBJECTS; i++) + if (maxevents[i]) CloseHandle(maxevents[i]);
/* semaphores */ semaphore[0] = CreateSemaphore( NULL, 0, 1, NULL );