kernel32/tests: Remove some win9x workarounds.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
b1aee9c391
commit
be8affc4bd
|
@ -31,14 +31,6 @@
|
||||||
#undef __fastcall
|
#undef __fastcall
|
||||||
#define __fastcall __stdcall
|
#define __fastcall __stdcall
|
||||||
|
|
||||||
static BOOL (WINAPI *pChangeTimerQueueTimer)(HANDLE, HANDLE, ULONG, ULONG);
|
|
||||||
static HANDLE (WINAPI *pCreateTimerQueue)(void);
|
|
||||||
static BOOL (WINAPI *pCreateTimerQueueTimer)(PHANDLE, HANDLE, WAITORTIMERCALLBACK,
|
|
||||||
PVOID, DWORD, DWORD, ULONG);
|
|
||||||
static HANDLE (WINAPI *pCreateWaitableTimerA)(SECURITY_ATTRIBUTES*,BOOL,LPCSTR);
|
|
||||||
static BOOL (WINAPI *pDeleteTimerQueueEx)(HANDLE, HANDLE);
|
|
||||||
static BOOL (WINAPI *pDeleteTimerQueueTimer)(HANDLE, HANDLE, HANDLE);
|
|
||||||
static HANDLE (WINAPI *pOpenWaitableTimerA)(DWORD,BOOL,LPCSTR);
|
|
||||||
static HANDLE (WINAPI *pCreateMemoryResourceNotification)(MEMORY_RESOURCE_NOTIFICATION_TYPE);
|
static HANDLE (WINAPI *pCreateMemoryResourceNotification)(MEMORY_RESOURCE_NOTIFICATION_TYPE);
|
||||||
static BOOL (WINAPI *pQueryMemoryResourceNotification)(HANDLE, PBOOL);
|
static BOOL (WINAPI *pQueryMemoryResourceNotification)(HANDLE, PBOOL);
|
||||||
static VOID (WINAPI *pInitOnceInitialize)(PINIT_ONCE);
|
static VOID (WINAPI *pInitOnceInitialize)(PINIT_ONCE);
|
||||||
|
@ -109,25 +101,12 @@ static void init_fastcall_thunk(void)
|
||||||
|
|
||||||
static void test_signalandwait(void)
|
static void test_signalandwait(void)
|
||||||
{
|
{
|
||||||
DWORD (WINAPI *pSignalObjectAndWait)(HANDLE, HANDLE, DWORD, BOOL);
|
|
||||||
HMODULE kernel32;
|
|
||||||
DWORD r;
|
DWORD r;
|
||||||
HANDLE event[2], semaphore[2], file;
|
HANDLE event[2], semaphore[2], file;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
kernel32 = GetModuleHandleA("kernel32.dll");
|
|
||||||
pSignalObjectAndWait = (void*) GetProcAddress(kernel32, "SignalObjectAndWait");
|
|
||||||
|
|
||||||
if (!pSignalObjectAndWait)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* invalid parameters */
|
/* invalid parameters */
|
||||||
r = pSignalObjectAndWait(NULL, NULL, 0, 0);
|
r = SignalObjectAndWait(NULL, NULL, 0, 0);
|
||||||
if (r == ERROR_INVALID_FUNCTION)
|
|
||||||
{
|
|
||||||
win_skip("SignalObjectAndWait is not implemented\n");
|
|
||||||
return; /* Win98/ME */
|
|
||||||
}
|
|
||||||
ok( r == WAIT_FAILED, "should fail\n");
|
ok( r == WAIT_FAILED, "should fail\n");
|
||||||
|
|
||||||
event[0] = CreateEventW(NULL, 0, 0, NULL);
|
event[0] = CreateEventW(NULL, 0, 0, NULL);
|
||||||
|
@ -135,22 +114,22 @@ static void test_signalandwait(void)
|
||||||
|
|
||||||
ok( event[0] && event[1], "failed to create event flags\n");
|
ok( event[0] && event[1], "failed to create event flags\n");
|
||||||
|
|
||||||
r = pSignalObjectAndWait(event[0], NULL, 0, FALSE);
|
r = SignalObjectAndWait(event[0], NULL, 0, FALSE);
|
||||||
ok( r == WAIT_FAILED, "should fail\n");
|
ok( r == WAIT_FAILED, "should fail\n");
|
||||||
|
|
||||||
r = pSignalObjectAndWait(NULL, event[0], 0, FALSE);
|
r = SignalObjectAndWait(NULL, event[0], 0, FALSE);
|
||||||
ok( r == WAIT_FAILED, "should fail\n");
|
ok( r == WAIT_FAILED, "should fail\n");
|
||||||
|
|
||||||
|
|
||||||
/* valid parameters */
|
/* valid parameters */
|
||||||
r = pSignalObjectAndWait(event[0], event[1], 0, FALSE);
|
r = SignalObjectAndWait(event[0], event[1], 0, FALSE);
|
||||||
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
||||||
|
|
||||||
/* event[0] is now signalled - we repeat this test multiple times
|
/* event[0] is now signalled - we repeat this test multiple times
|
||||||
* to ensure that the wineserver handles this situation properly. */
|
* to ensure that the wineserver handles this situation properly. */
|
||||||
for (i = 0; i < 10000; i++)
|
for (i = 0; i < 10000; i++)
|
||||||
{
|
{
|
||||||
r = pSignalObjectAndWait(event[0], event[0], 0, FALSE);
|
r = SignalObjectAndWait(event[0], event[0], 0, FALSE);
|
||||||
ok(r == WAIT_OBJECT_0, "should succeed\n");
|
ok(r == WAIT_OBJECT_0, "should succeed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,12 +137,12 @@ static void test_signalandwait(void)
|
||||||
r = WaitForSingleObject(event[0], 0);
|
r = WaitForSingleObject(event[0], 0);
|
||||||
ok( r == WAIT_TIMEOUT, "event was signalled\n");
|
ok( r == WAIT_TIMEOUT, "event was signalled\n");
|
||||||
|
|
||||||
r = pSignalObjectAndWait(event[0], event[0], 0, FALSE);
|
r = SignalObjectAndWait(event[0], event[0], 0, FALSE);
|
||||||
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
||||||
|
|
||||||
/* clear event[1] and check for a timeout */
|
/* clear event[1] and check for a timeout */
|
||||||
ok(ResetEvent(event[1]), "failed to clear event[1]\n");
|
ok(ResetEvent(event[1]), "failed to clear event[1]\n");
|
||||||
r = pSignalObjectAndWait(event[0], event[1], 0, FALSE);
|
r = SignalObjectAndWait(event[0], event[1], 0, FALSE);
|
||||||
ok( r == WAIT_TIMEOUT, "should timeout\n");
|
ok( r == WAIT_TIMEOUT, "should timeout\n");
|
||||||
|
|
||||||
CloseHandle(event[0]);
|
CloseHandle(event[0]);
|
||||||
|
@ -174,10 +153,10 @@ static void test_signalandwait(void)
|
||||||
semaphore[1] = CreateSemaphoreW( NULL, 1, 1, NULL );
|
semaphore[1] = CreateSemaphoreW( NULL, 1, 1, NULL );
|
||||||
ok( semaphore[0] && semaphore[1], "failed to create semaphore\n");
|
ok( semaphore[0] && semaphore[1], "failed to create semaphore\n");
|
||||||
|
|
||||||
r = pSignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
|
r = SignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
|
||||||
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
ok( r == WAIT_OBJECT_0, "should succeed\n");
|
||||||
|
|
||||||
r = pSignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
|
r = SignalObjectAndWait(semaphore[0], semaphore[1], 0, FALSE);
|
||||||
ok( r == WAIT_FAILED, "should fail\n");
|
ok( r == WAIT_FAILED, "should fail\n");
|
||||||
|
|
||||||
r = ReleaseSemaphore(semaphore[0],1,NULL);
|
r = ReleaseSemaphore(semaphore[0],1,NULL);
|
||||||
|
@ -192,7 +171,7 @@ static void test_signalandwait(void)
|
||||||
/* try a registry key */
|
/* try a registry key */
|
||||||
file = CreateFileA("x", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
|
file = CreateFileA("x", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
|
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL);
|
||||||
r = pSignalObjectAndWait(file, file, 0, FALSE);
|
r = SignalObjectAndWait(file, file, 0, FALSE);
|
||||||
ok( r == WAIT_FAILED, "should fail\n");
|
ok( r == WAIT_FAILED, "should fail\n");
|
||||||
ok( ERROR_INVALID_HANDLE == GetLastError(), "should return invalid handle error\n");
|
ok( ERROR_INVALID_HANDLE == GetLastError(), "should return invalid handle error\n");
|
||||||
CloseHandle(file);
|
CloseHandle(file);
|
||||||
|
@ -614,42 +593,34 @@ static void test_waitable_timer(void)
|
||||||
{
|
{
|
||||||
HANDLE handle, handle2;
|
HANDLE handle, handle2;
|
||||||
|
|
||||||
if (!pCreateWaitableTimerA || !pOpenWaitableTimerA)
|
|
||||||
{
|
|
||||||
win_skip("{Create,Open}WaitableTimerA() is not available\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* test case sensitivity */
|
/* test case sensitivity */
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
handle = pCreateWaitableTimerA(NULL, FALSE, __FILE__ ": Test WaitableTimer");
|
handle = CreateWaitableTimerA(NULL, FALSE, __FILE__ ": Test WaitableTimer");
|
||||||
ok(handle != NULL, "CreateWaitableTimer failed with error %u\n", GetLastError());
|
ok(handle != NULL, "CreateWaitableTimer failed with error %u\n", GetLastError());
|
||||||
ok(GetLastError() == 0, "wrong error %u\n", GetLastError());
|
ok(GetLastError() == 0, "wrong error %u\n", GetLastError());
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
handle2 = pCreateWaitableTimerA(NULL, FALSE, __FILE__ ": Test WaitableTimer");
|
handle2 = CreateWaitableTimerA(NULL, FALSE, __FILE__ ": Test WaitableTimer");
|
||||||
ok( handle2 != NULL, "CreateWaitableTimer failed with error %d\n", GetLastError());
|
ok( handle2 != NULL, "CreateWaitableTimer failed with error %d\n", GetLastError());
|
||||||
ok( GetLastError() == ERROR_ALREADY_EXISTS, "wrong error %u\n", GetLastError());
|
ok( GetLastError() == ERROR_ALREADY_EXISTS, "wrong error %u\n", GetLastError());
|
||||||
CloseHandle( handle2 );
|
CloseHandle( handle2 );
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
handle2 = pCreateWaitableTimerA(NULL, FALSE, __FILE__ ": TEST WAITABLETIMER");
|
handle2 = CreateWaitableTimerA(NULL, FALSE, __FILE__ ": TEST WAITABLETIMER");
|
||||||
ok( handle2 != NULL, "CreateWaitableTimer failed with error %d\n", GetLastError());
|
ok( handle2 != NULL, "CreateWaitableTimer failed with error %d\n", GetLastError());
|
||||||
ok( GetLastError() == 0, "wrong error %u\n", GetLastError());
|
ok( GetLastError() == 0, "wrong error %u\n", GetLastError());
|
||||||
CloseHandle( handle2 );
|
CloseHandle( handle2 );
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
handle2 = pOpenWaitableTimerA( TIMER_ALL_ACCESS, FALSE, __FILE__ ": Test WaitableTimer");
|
handle2 = OpenWaitableTimerA( TIMER_ALL_ACCESS, FALSE, __FILE__ ": Test WaitableTimer");
|
||||||
ok( handle2 != NULL, "OpenWaitableTimer failed with error %d\n", GetLastError());
|
ok( handle2 != NULL, "OpenWaitableTimer failed with error %d\n", GetLastError());
|
||||||
CloseHandle( handle2 );
|
CloseHandle( handle2 );
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
handle2 = pOpenWaitableTimerA( TIMER_ALL_ACCESS, FALSE, __FILE__ ": TEST WAITABLETIMER");
|
handle2 = OpenWaitableTimerA( TIMER_ALL_ACCESS, FALSE, __FILE__ ": TEST WAITABLETIMER");
|
||||||
ok( !handle2, "OpenWaitableTimer succeeded\n");
|
ok( !handle2, "OpenWaitableTimer succeeded\n");
|
||||||
ok( GetLastError() == ERROR_FILE_NOT_FOUND ||
|
ok( GetLastError() == ERROR_FILE_NOT_FOUND, "wrong error %u\n", GetLastError());
|
||||||
GetLastError() == ERROR_INVALID_NAME, /* win98 */
|
|
||||||
"wrong error %u\n", GetLastError());
|
|
||||||
|
|
||||||
CloseHandle( handle );
|
CloseHandle( handle );
|
||||||
}
|
}
|
||||||
|
@ -779,7 +750,7 @@ static void CALLBACK timer_queue_cb2(PVOID p, BOOLEAN timedOut)
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
/* Note, XP SP2 does *not* do any deadlock checking, so passing
|
/* Note, XP SP2 does *not* do any deadlock checking, so passing
|
||||||
INVALID_HANDLE_VALUE here will just hang. */
|
INVALID_HANDLE_VALUE here will just hang. */
|
||||||
ret = pDeleteTimerQueueTimer(d->q, d->t, NULL);
|
ret = DeleteTimerQueueTimer(d->q, d->t, NULL);
|
||||||
ok(!ret, "DeleteTimerQueueTimer\n");
|
ok(!ret, "DeleteTimerQueueTimer\n");
|
||||||
ok(GetLastError() == ERROR_IO_PENDING, "DeleteTimerQueueTimer\n");
|
ok(GetLastError() == ERROR_IO_PENDING, "DeleteTimerQueueTimer\n");
|
||||||
}
|
}
|
||||||
|
@ -793,7 +764,7 @@ static void CALLBACK timer_queue_cb3(PVOID p, BOOLEAN timedOut)
|
||||||
{
|
{
|
||||||
/* Basically kill the timer since it won't have time to run
|
/* Basically kill the timer since it won't have time to run
|
||||||
again. */
|
again. */
|
||||||
BOOL ret = pChangeTimerQueueTimer(d->q, d->t, 10000, 0);
|
BOOL ret = ChangeTimerQueueTimer(d->q, d->t, 10000, 0);
|
||||||
ok(ret, "ChangeTimerQueueTimer\n");
|
ok(ret, "ChangeTimerQueueTimer\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -809,7 +780,7 @@ static void CALLBACK timer_queue_cb4(PVOID p, BOOLEAN timedOut)
|
||||||
period of zero (run once), then ChangeTimerQueueTimer will
|
period of zero (run once), then ChangeTimerQueueTimer will
|
||||||
fail if the timer is already flagged. Hence we really run
|
fail if the timer is already flagged. Hence we really run
|
||||||
only once. Otherwise we will run multiple times. */
|
only once. Otherwise we will run multiple times. */
|
||||||
BOOL ret = pChangeTimerQueueTimer(d->q, d->t, 50, 50);
|
BOOL ret = ChangeTimerQueueTimer(d->q, d->t, 50, 50);
|
||||||
ok(ret, "ChangeTimerQueueTimer\n");
|
ok(ret, "ChangeTimerQueueTimer\n");
|
||||||
++d->num_calls;
|
++d->num_calls;
|
||||||
}
|
}
|
||||||
|
@ -841,15 +812,15 @@ static void CALLBACK timer_queue_cb6(PVOID p, BOOLEAN timedOut)
|
||||||
|
|
||||||
/* The delete will pend while we are in this callback. */
|
/* The delete will pend while we are in this callback. */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueTimer(d->q, d->t, NULL);
|
ret = DeleteTimerQueueTimer(d->q, d->t, NULL);
|
||||||
ok(!ret, "DeleteTimerQueueTimer\n");
|
ok(!ret, "DeleteTimerQueueTimer\n");
|
||||||
ok(GetLastError() == ERROR_IO_PENDING, "DeleteTimerQueueTimer\n");
|
ok(GetLastError() == ERROR_IO_PENDING, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pCreateTimerQueueTimer(&t, d->q, timer_queue_cb1, NULL, 100, 0, 0);
|
ret = CreateTimerQueueTimer(&t, d->q, timer_queue_cb1, NULL, 100, 0, 0);
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t != NULL, "CreateTimerQueueTimer\n");
|
ok(t != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pDeleteTimerQueueTimer(d->q, t, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(d->q, t, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer\n");
|
ok(ret, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Now we stay alive by hanging around in the callback. */
|
/* Now we stay alive by hanging around in the callback. */
|
||||||
|
@ -865,35 +836,27 @@ static void test_timer_queue(void)
|
||||||
HANDLE e, et1, et2;
|
HANDLE e, et1, et2;
|
||||||
BOOL ret, ret0;
|
BOOL ret, ret0;
|
||||||
|
|
||||||
if (!pChangeTimerQueueTimer || !pCreateTimerQueue || !pCreateTimerQueueTimer
|
|
||||||
|| !pDeleteTimerQueueEx || !pDeleteTimerQueueTimer)
|
|
||||||
{
|
|
||||||
win_skip("TimerQueue API not present\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Test asynchronous deletion of the queue. */
|
/* Test asynchronous deletion of the queue. */
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueEx(q, NULL);
|
ret = DeleteTimerQueueEx(q, NULL);
|
||||||
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
|
||||||
/* Test synchronous deletion of the queue and running timers. */
|
/* Test synchronous deletion of the queue and running timers. */
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
/* Not called. */
|
/* Not called. */
|
||||||
t0 = NULL;
|
t0 = NULL;
|
||||||
n0 = 0;
|
n0 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t0, q, timer_queue_cb1, &n0, 0,
|
ret = CreateTimerQueueTimer(&t0, q, timer_queue_cb1, &n0, 0, 300, 0);
|
||||||
300, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t0 != NULL, "CreateTimerQueueTimer\n");
|
ok(t0 != NULL, "CreateTimerQueueTimer\n");
|
||||||
ret0 = pDeleteTimerQueueTimer(q, t0, NULL);
|
ret0 = DeleteTimerQueueTimer(q, t0, NULL);
|
||||||
ok((!ret0 && GetLastError() == ERROR_IO_PENDING) ||
|
ok((!ret0 && GetLastError() == ERROR_IO_PENDING) ||
|
||||||
broken(ret0), /* Win 2000 & XP & 2003 */
|
broken(ret0), /* Win 2000 & XP & 2003 */
|
||||||
"DeleteTimerQueueTimer ret=%d le=%u\n", ret0, GetLastError());
|
"DeleteTimerQueueTimer ret=%d le=%u\n", ret0, GetLastError());
|
||||||
|
@ -901,40 +864,35 @@ static void test_timer_queue(void)
|
||||||
/* Called once. */
|
/* Called once. */
|
||||||
t1 = NULL;
|
t1 = NULL;
|
||||||
n1 = 0;
|
n1 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 0,
|
ret = CreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 0, 0, 0);
|
||||||
0, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* A slow one. */
|
/* A slow one. */
|
||||||
t2 = NULL;
|
t2 = NULL;
|
||||||
n2 = 0;
|
n2 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t2, q, timer_queue_cb1, &n2, 0,
|
ret = CreateTimerQueueTimer(&t2, q, timer_queue_cb1, &n2, 0, 100, 0);
|
||||||
100, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* A fast one. */
|
/* A fast one. */
|
||||||
t3 = NULL;
|
t3 = NULL;
|
||||||
n3 = 0;
|
n3 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t3, q, timer_queue_cb1, &n3, 0,
|
ret = CreateTimerQueueTimer(&t3, q, timer_queue_cb1, &n3, 0, 10, 0);
|
||||||
10, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Start really late (it won't start). */
|
/* Start really late (it won't start). */
|
||||||
t4 = NULL;
|
t4 = NULL;
|
||||||
n4 = 0;
|
n4 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t4, q, timer_queue_cb1, &n4, 10000,
|
ret = CreateTimerQueueTimer(&t4, q, timer_queue_cb1, &n4, 10000, 10, 0);
|
||||||
10, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Start soon, but delay so long it won't run again. */
|
/* Start soon, but delay so long it won't run again. */
|
||||||
t5 = NULL;
|
t5 = NULL;
|
||||||
n5 = 0;
|
n5 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t5, q, timer_queue_cb1, &n5, 0,
|
ret = CreateTimerQueueTimer(&t5, q, timer_queue_cb1, &n5, 0, 10000, 0);
|
||||||
10000, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t5 != NULL, "CreateTimerQueueTimer\n");
|
ok(t5 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
|
@ -942,14 +900,14 @@ static void test_timer_queue(void)
|
||||||
Sleep(500);
|
Sleep(500);
|
||||||
|
|
||||||
/* Test deleting a once-only timer. */
|
/* Test deleting a once-only timer. */
|
||||||
ret = pDeleteTimerQueueTimer(q, t1, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(q, t1, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer\n");
|
ok(ret, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
/* A periodic timer. */
|
/* A periodic timer. */
|
||||||
ret = pDeleteTimerQueueTimer(q, t2, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(q, t2, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer\n");
|
ok(ret, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pDeleteTimerQueueEx(q, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueEx(q, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueEx\n");
|
ok(ret, "DeleteTimerQueueEx\n");
|
||||||
todo_wine
|
todo_wine
|
||||||
ok(n0 == 1 || broken(ret0 && n0 == 0), "Timer callback 0 expected 1 got %d\n", n0);
|
ok(n0 == 1 || broken(ret0 && n0 == 0), "Timer callback 0 expected 1 got %d\n", n0);
|
||||||
|
@ -968,32 +926,30 @@ static void test_timer_queue(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
/* Run once and finish quickly (should be done when we delete it). */
|
/* Run once and finish quickly (should be done when we delete it). */
|
||||||
t1 = NULL;
|
t1 = NULL;
|
||||||
ret = pCreateTimerQueueTimer(&t1, q, timer_queue_cb5, NULL, 0, 0, 0);
|
ret = CreateTimerQueueTimer(&t1, q, timer_queue_cb5, NULL, 0, 0, 0);
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Run once and finish slowly (shouldn't be done when we delete it). */
|
/* Run once and finish slowly (shouldn't be done when we delete it). */
|
||||||
t2 = NULL;
|
t2 = NULL;
|
||||||
ret = pCreateTimerQueueTimer(&t2, q, timer_queue_cb5, (PVOID) 1000, 0,
|
ret = CreateTimerQueueTimer(&t2, q, timer_queue_cb5, (PVOID) 1000, 0, 0, 0);
|
||||||
0, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Run once and finish quickly (should be done when we delete it). */
|
/* Run once and finish quickly (should be done when we delete it). */
|
||||||
t3 = NULL;
|
t3 = NULL;
|
||||||
ret = pCreateTimerQueueTimer(&t3, q, timer_queue_cb5, NULL, 0, 0, 0);
|
ret = CreateTimerQueueTimer(&t3, q, timer_queue_cb5, NULL, 0, 0, 0);
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Run once and finish slowly (shouldn't be done when we delete it). */
|
/* Run once and finish slowly (shouldn't be done when we delete it). */
|
||||||
t4 = NULL;
|
t4 = NULL;
|
||||||
ret = pCreateTimerQueueTimer(&t4, q, timer_queue_cb5, (PVOID) 1000, 0,
|
ret = CreateTimerQueueTimer(&t4, q, timer_queue_cb5, (PVOID) 1000, 0, 0, 0);
|
||||||
0, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
|
@ -1003,20 +959,20 @@ static void test_timer_queue(void)
|
||||||
/* DeleteTimerQueueTimer always returns PENDING with a NULL event,
|
/* DeleteTimerQueueTimer always returns PENDING with a NULL event,
|
||||||
even if the timer is finished. */
|
even if the timer is finished. */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueTimer(q, t1, NULL);
|
ret = DeleteTimerQueueTimer(q, t1, NULL);
|
||||||
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueTimer(q, t2, NULL);
|
ret = DeleteTimerQueueTimer(q, t2, NULL);
|
||||||
ok(!ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
ok(!ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
||||||
ok(GetLastError() == ERROR_IO_PENDING,
|
ok(GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueTimer(q, t3, et1);
|
ret = DeleteTimerQueueTimer(q, t3, et1);
|
||||||
ok(ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
ok(ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
||||||
ok(GetLastError() == 0xdeadbeef,
|
ok(GetLastError() == 0xdeadbeef,
|
||||||
"DeleteTimerQueueTimer, GetLastError: expected 0xdeadbeef, got %d\n",
|
"DeleteTimerQueueTimer, GetLastError: expected 0xdeadbeef, got %d\n",
|
||||||
|
@ -1025,7 +981,7 @@ static void test_timer_queue(void)
|
||||||
"Timer destruction event not triggered\n");
|
"Timer destruction event not triggered\n");
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueTimer(q, t4, et2);
|
ret = DeleteTimerQueueTimer(q, t4, et2);
|
||||||
ok(!ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
ok(!ret, "DeleteTimerQueueTimer call was expected to fail\n");
|
||||||
ok(GetLastError() == ERROR_IO_PENDING,
|
ok(GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueTimer, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
|
@ -1034,7 +990,7 @@ static void test_timer_queue(void)
|
||||||
"Timer destruction event not triggered\n");
|
"Timer destruction event not triggered\n");
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueEx(q, e);
|
ret = DeleteTimerQueueEx(q, e);
|
||||||
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
@ -1043,25 +999,23 @@ static void test_timer_queue(void)
|
||||||
CloseHandle(e);
|
CloseHandle(e);
|
||||||
|
|
||||||
/* Test deleting/changing a timer in execution. */
|
/* Test deleting/changing a timer in execution. */
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
/* Test changing a once-only timer before it fires (this is allowed,
|
/* Test changing a once-only timer before it fires (this is allowed,
|
||||||
whereas after it fires you cannot). */
|
whereas after it fires you cannot). */
|
||||||
n1 = 0;
|
n1 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 10000,
|
ret = CreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 10000, 0, 0);
|
||||||
0, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
||||||
ret = pChangeTimerQueueTimer(q, t1, 0, 0);
|
ret = ChangeTimerQueueTimer(q, t1, 0, 0);
|
||||||
ok(ret, "ChangeTimerQueueTimer\n");
|
ok(ret, "ChangeTimerQueueTimer\n");
|
||||||
|
|
||||||
d2.t = t2 = NULL;
|
d2.t = t2 = NULL;
|
||||||
d2.num_calls = 0;
|
d2.num_calls = 0;
|
||||||
d2.max_calls = 3;
|
d2.max_calls = 3;
|
||||||
d2.q = q;
|
d2.q = q;
|
||||||
ret = pCreateTimerQueueTimer(&t2, q, timer_queue_cb2, &d2, 10,
|
ret = CreateTimerQueueTimer(&t2, q, timer_queue_cb2, &d2, 10, 10, 0);
|
||||||
10, 0);
|
|
||||||
d2.t = t2;
|
d2.t = t2;
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
@ -1070,8 +1024,7 @@ static void test_timer_queue(void)
|
||||||
d3.num_calls = 0;
|
d3.num_calls = 0;
|
||||||
d3.max_calls = 4;
|
d3.max_calls = 4;
|
||||||
d3.q = q;
|
d3.q = q;
|
||||||
ret = pCreateTimerQueueTimer(&t3, q, timer_queue_cb3, &d3, 10,
|
ret = CreateTimerQueueTimer(&t3, q, timer_queue_cb3, &d3, 10, 10, 0);
|
||||||
10, 0);
|
|
||||||
d3.t = t3;
|
d3.t = t3;
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
ok(t3 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
@ -1079,15 +1032,14 @@ static void test_timer_queue(void)
|
||||||
d4.t = t4 = NULL;
|
d4.t = t4 = NULL;
|
||||||
d4.num_calls = 0;
|
d4.num_calls = 0;
|
||||||
d4.q = q;
|
d4.q = q;
|
||||||
ret = pCreateTimerQueueTimer(&t4, q, timer_queue_cb4, &d4, 10,
|
ret = CreateTimerQueueTimer(&t4, q, timer_queue_cb4, &d4, 10, 0, 0);
|
||||||
0, 0);
|
|
||||||
d4.t = t4;
|
d4.t = t4;
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
ok(t4 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
Sleep(500);
|
Sleep(500);
|
||||||
|
|
||||||
ret = pDeleteTimerQueueEx(q, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueEx(q, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueEx\n");
|
ok(ret, "DeleteTimerQueueEx\n");
|
||||||
ok(n1 == 1, "ChangeTimerQueueTimer\n");
|
ok(n1 == 1, "ChangeTimerQueueTimer\n");
|
||||||
ok(d2.num_calls == d2.max_calls, "DeleteTimerQueueTimer\n");
|
ok(d2.num_calls == d2.max_calls, "DeleteTimerQueueTimer\n");
|
||||||
|
@ -1095,15 +1047,14 @@ static void test_timer_queue(void)
|
||||||
ok(d4.num_calls == 1, "Timer flagged for deletion incorrectly\n");
|
ok(d4.num_calls == 1, "Timer flagged for deletion incorrectly\n");
|
||||||
|
|
||||||
/* Test an obscure bug that was in the original implementation. */
|
/* Test an obscure bug that was in the original implementation. */
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
/* All the work is done in the callback. */
|
/* All the work is done in the callback. */
|
||||||
d1.t = t1 = NULL;
|
d1.t = t1 = NULL;
|
||||||
d1.num_calls = 0;
|
d1.num_calls = 0;
|
||||||
d1.q = q;
|
d1.q = q;
|
||||||
ret = pCreateTimerQueueTimer(&t1, q, timer_queue_cb6, &d1, 100,
|
ret = CreateTimerQueueTimer(&t1, q, timer_queue_cb6, &d1, 100, 100, WT_EXECUTELONGFUNCTION);
|
||||||
100, WT_EXECUTELONGFUNCTION);
|
|
||||||
d1.t = t1;
|
d1.t = t1;
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
@ -1111,7 +1062,7 @@ static void test_timer_queue(void)
|
||||||
Sleep(750);
|
Sleep(750);
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueEx(q, NULL);
|
ret = DeleteTimerQueueEx(q, NULL);
|
||||||
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
@ -1120,57 +1071,54 @@ static void test_timer_queue(void)
|
||||||
/* Test functions on the default timer queue. */
|
/* Test functions on the default timer queue. */
|
||||||
t1 = NULL;
|
t1 = NULL;
|
||||||
n1 = 0;
|
n1 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t1, NULL, timer_queue_cb1, &n1, 1000,
|
ret = CreateTimerQueueTimer(&t1, NULL, timer_queue_cb1, &n1, 1000, 1000, 0);
|
||||||
1000, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer, default queue\n");
|
ok(ret, "CreateTimerQueueTimer, default queue\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer, default queue\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer, default queue\n");
|
||||||
|
|
||||||
ret = pChangeTimerQueueTimer(NULL, t1, 2000, 2000);
|
ret = ChangeTimerQueueTimer(NULL, t1, 2000, 2000);
|
||||||
ok(ret, "ChangeTimerQueueTimer, default queue\n");
|
ok(ret, "ChangeTimerQueueTimer, default queue\n");
|
||||||
|
|
||||||
ret = pDeleteTimerQueueTimer(NULL, t1, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(NULL, t1, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer, default queue\n");
|
ok(ret, "DeleteTimerQueueTimer, default queue\n");
|
||||||
|
|
||||||
/* Try mixing default and non-default queues. Apparently this works. */
|
/* Try mixing default and non-default queues. Apparently this works. */
|
||||||
q = pCreateTimerQueue();
|
q = CreateTimerQueue();
|
||||||
ok(q != NULL, "CreateTimerQueue\n");
|
ok(q != NULL, "CreateTimerQueue\n");
|
||||||
|
|
||||||
t1 = NULL;
|
t1 = NULL;
|
||||||
n1 = 0;
|
n1 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 1000,
|
ret = CreateTimerQueueTimer(&t1, q, timer_queue_cb1, &n1, 1000, 1000, 0);
|
||||||
1000, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
ok(t1 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
t2 = NULL;
|
t2 = NULL;
|
||||||
n2 = 0;
|
n2 = 0;
|
||||||
ret = pCreateTimerQueueTimer(&t2, NULL, timer_queue_cb1, &n2, 1000,
|
ret = CreateTimerQueueTimer(&t2, NULL, timer_queue_cb1, &n2, 1000, 1000, 0);
|
||||||
1000, 0);
|
|
||||||
ok(ret, "CreateTimerQueueTimer\n");
|
ok(ret, "CreateTimerQueueTimer\n");
|
||||||
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
ok(t2 != NULL, "CreateTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pChangeTimerQueueTimer(NULL, t1, 2000, 2000);
|
ret = ChangeTimerQueueTimer(NULL, t1, 2000, 2000);
|
||||||
ok(ret, "ChangeTimerQueueTimer\n");
|
ok(ret, "ChangeTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pChangeTimerQueueTimer(q, t2, 2000, 2000);
|
ret = ChangeTimerQueueTimer(q, t2, 2000, 2000);
|
||||||
ok(ret, "ChangeTimerQueueTimer\n");
|
ok(ret, "ChangeTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pDeleteTimerQueueTimer(NULL, t1, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(NULL, t1, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer\n");
|
ok(ret, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
ret = pDeleteTimerQueueTimer(q, t2, INVALID_HANDLE_VALUE);
|
ret = DeleteTimerQueueTimer(q, t2, INVALID_HANDLE_VALUE);
|
||||||
ok(ret, "DeleteTimerQueueTimer\n");
|
ok(ret, "DeleteTimerQueueTimer\n");
|
||||||
|
|
||||||
/* Try to delete the default queue? In any case: not allowed. */
|
/* Try to delete the default queue? In any case: not allowed. */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueEx(NULL, NULL);
|
ret = DeleteTimerQueueEx(NULL, NULL);
|
||||||
ok(!ret, "DeleteTimerQueueEx call was expected to fail\n");
|
ok(!ret, "DeleteTimerQueueEx call was expected to fail\n");
|
||||||
ok(GetLastError() == ERROR_INVALID_HANDLE,
|
ok(GetLastError() == ERROR_INVALID_HANDLE,
|
||||||
"DeleteTimerQueueEx, GetLastError: expected ERROR_INVALID_HANDLE, got %d\n",
|
"DeleteTimerQueueEx, GetLastError: expected ERROR_INVALID_HANDLE, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ret = pDeleteTimerQueueEx(q, NULL);
|
ret = DeleteTimerQueueEx(q, NULL);
|
||||||
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
ok(ret /* vista */ || GetLastError() == ERROR_IO_PENDING,
|
||||||
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
"DeleteTimerQueueEx, GetLastError: expected ERROR_IO_PENDING, got %d\n",
|
||||||
GetLastError());
|
GetLastError());
|
||||||
|
@ -2655,15 +2603,6 @@ START_TEST(sync)
|
||||||
HMODULE hdll = GetModuleHandleA("kernel32.dll");
|
HMODULE hdll = GetModuleHandleA("kernel32.dll");
|
||||||
HMODULE hntdll = GetModuleHandleA("ntdll.dll");
|
HMODULE hntdll = GetModuleHandleA("ntdll.dll");
|
||||||
|
|
||||||
pChangeTimerQueueTimer = (void*)GetProcAddress(hdll, "ChangeTimerQueueTimer");
|
|
||||||
pCreateTimerQueue = (void*)GetProcAddress(hdll, "CreateTimerQueue");
|
|
||||||
pCreateTimerQueueTimer = (void*)GetProcAddress(hdll, "CreateTimerQueueTimer");
|
|
||||||
pCreateWaitableTimerA = (void*)GetProcAddress(hdll, "CreateWaitableTimerA");
|
|
||||||
pDeleteTimerQueueEx = (void*)GetProcAddress(hdll, "DeleteTimerQueueEx");
|
|
||||||
pDeleteTimerQueueTimer = (void*)GetProcAddress(hdll, "DeleteTimerQueueTimer");
|
|
||||||
pOpenWaitableTimerA = (void*)GetProcAddress(hdll, "OpenWaitableTimerA");
|
|
||||||
pCreateMemoryResourceNotification = (void *)GetProcAddress(hdll, "CreateMemoryResourceNotification");
|
|
||||||
pQueryMemoryResourceNotification = (void *)GetProcAddress(hdll, "QueryMemoryResourceNotification");
|
|
||||||
pInitOnceInitialize = (void *)GetProcAddress(hdll, "InitOnceInitialize");
|
pInitOnceInitialize = (void *)GetProcAddress(hdll, "InitOnceInitialize");
|
||||||
pInitOnceExecuteOnce = (void *)GetProcAddress(hdll, "InitOnceExecuteOnce");
|
pInitOnceExecuteOnce = (void *)GetProcAddress(hdll, "InitOnceExecuteOnce");
|
||||||
pInitOnceBeginInitialize = (void *)GetProcAddress(hdll, "InitOnceBeginInitialize");
|
pInitOnceBeginInitialize = (void *)GetProcAddress(hdll, "InitOnceBeginInitialize");
|
||||||
|
|
Loading…
Reference in New Issue