Retry waiting if STATUS_ALERTED is returned
Modified: trunk/reactos/lib/kernel32/synch/wait.c
_____
Modified: trunk/reactos/lib/kernel32/synch/wait.c
--- trunk/reactos/lib/kernel32/synch/wait.c 2005-08-07 23:19:15 UTC
(rev 17188)
+++ trunk/reactos/lib/kernel32/synch/wait.c 2005-08-07 23:22:18 UTC
(rev 17189)
@@ -90,7 +90,7 @@
Time.QuadPart = -10000 * (LONGLONG)dwMilliseconds;
TimePtr = &Time;
}
-
+WaitAgain:
Status = NtWaitForSingleObject(hHandle,
(BOOLEAN) bAlertable,
TimePtr);
@@ -100,6 +100,7 @@
SetLastErrorByStatus (Status);
return WAIT_FAILED;
}
+ if (Status == STATUS_ALERTED && bAlertable) goto WaitAgain;
return Status;
}
@@ -210,22 +211,24 @@
TimePtr = &Time;
}
+WaitAgain:
Status = NtWaitForMultipleObjects (nCount,
HandleBuffer,
bWaitAll ? WaitAll : WaitAny,
(BOOLEAN)bAlertable,
TimePtr);
- if (HandleBuffer != Handle)
- {
- RtlFreeHeap(RtlGetProcessHeap(), 0, HandleBuffer);
- }
-
if (HIWORD(Status))
{
SetLastErrorByStatus (Status);
- return WAIT_FAILED;
+ Status = WAIT_FAILED;
}
+ if (Status == STATUS_ALERTED && bAlertable) goto WaitAgain;
+ if (HandleBuffer != Handle)
+ {
+ RtlFreeHeap(RtlGetProcessHeap(), 0, HandleBuffer);
+ }
+
return Status;
}
Show replies by date