forked from Mirrors/wine-wine
quartz/systemclock: Also wake the semaphore at the given start time.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>stable
parent
9ff0c09e38
commit
b5eff130a7
|
@ -106,11 +106,11 @@ static DWORD WINAPI SystemClockAdviseThread(LPVOID lpParam) {
|
||||||
{
|
{
|
||||||
if (sink->rtBaseTime <= curTime)
|
if (sink->rtBaseTime <= curTime)
|
||||||
{
|
{
|
||||||
DWORD periods = (curTime - sink->rtBaseTime) / sink->rtIntervalTime;
|
DWORD periods = ((curTime - sink->rtBaseTime) / sink->rtIntervalTime) + 1;
|
||||||
ReleaseSemaphore(sink->hEvent, periods, NULL);
|
ReleaseSemaphore(sink->hEvent, periods, NULL);
|
||||||
sink->rtBaseTime += periods * sink->rtIntervalTime;
|
sink->rtBaseTime += periods * sink->rtIntervalTime;
|
||||||
}
|
}
|
||||||
timeOut = min(timeOut, ((sink->rtBaseTime + sink->rtIntervalTime) - curTime) / 10000);
|
timeOut = min(timeOut, (sink->rtBaseTime - curTime) / 10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&This->safe);
|
LeaveCriticalSection(&This->safe);
|
||||||
|
|
|
@ -160,7 +160,7 @@ static void test_advise(void)
|
||||||
|
|
||||||
hr = IReferenceClock_AdvisePeriodic(clock, current, 500 * 10000, (HSEMAPHORE)semaphore, &cookie);
|
hr = IReferenceClock_AdvisePeriodic(clock, current, 500 * 10000, (HSEMAPHORE)semaphore, &cookie);
|
||||||
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
ok(hr == S_OK, "Got hr %#x.\n", hr);
|
||||||
todo_wine ok(!WaitForSingleObject(semaphore, 10), "Semaphore should be signaled.\n");
|
ok(!WaitForSingleObject(semaphore, 10), "Semaphore should be signaled.\n");
|
||||||
for (i = 0; i < 5; ++i)
|
for (i = 0; i < 5; ++i)
|
||||||
{
|
{
|
||||||
ok(WaitForSingleObject(semaphore, 480) == WAIT_TIMEOUT, "Semaphore should not be signaled.\n");
|
ok(WaitForSingleObject(semaphore, 480) == WAIT_TIMEOUT, "Semaphore should not be signaled.\n");
|
||||||
|
|
Loading…
Reference in New Issue