[*] Harden LoopQueue.NT.cpp against interrupts.
This commit is contained in:
parent
ab7dd6c02b
commit
30f86b81ac
@ -31,7 +31,7 @@ namespace Aurora::Loop
|
||||
// Loopq Queue :: Extended Handle
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LoopQueue::ExtendedSourceInfo::ExtendedSourceInfo(const AuSPtr<ILoopSourceEx> &in) : source(in)
|
||||
LoopQueue::ExtendedSourceInfo::ExtendedSourceInfo(const AuSPtr<ILoopSourceEx> &in) : source(in), timeoutAbs(0)
|
||||
{
|
||||
|
||||
}
|
||||
@ -807,7 +807,11 @@ namespace Aurora::Loop
|
||||
DWORD status {};
|
||||
if (this->bIsWinLoop_)
|
||||
{
|
||||
status = ::MsgWaitForMultipleObjectsEx(next, this->handleArrayOr_.data() + index, sleepMS, QS_ALLPOSTMESSAGE | QS_ALLINPUT | QS_ALLEVENTS, MWMO_INPUTAVAILABLE | MWMO_ALERTABLE);
|
||||
do
|
||||
{
|
||||
status = ::MsgWaitForMultipleObjectsEx(next, this->handleArrayOr_.data() + index, sleepMS, QS_ALLPOSTMESSAGE | QS_ALLINPUT | QS_ALLEVENTS, MWMO_INPUTAVAILABLE | MWMO_ALERTABLE);
|
||||
}
|
||||
while (status == WAIT_IO_COMPLETION);
|
||||
|
||||
if (status == next)
|
||||
{
|
||||
@ -817,7 +821,11 @@ namespace Aurora::Loop
|
||||
}
|
||||
else
|
||||
{
|
||||
status = ::WaitForMultipleObjectsEx(next, this->handleArrayOr_.data() + index, false, sleepMS, true);
|
||||
do
|
||||
{
|
||||
status = ::WaitForMultipleObjectsEx(next, this->handleArrayOr_.data() + index, false, sleepMS, true);
|
||||
}
|
||||
while (status == WAIT_IO_COMPLETION);
|
||||
}
|
||||
|
||||
if (WaitStatusFromAligned(status, active))
|
||||
@ -893,11 +901,19 @@ namespace Aurora::Loop
|
||||
|
||||
if (this->bIsWinLoop_)
|
||||
{
|
||||
temp = ::MsgWaitForMultipleObjectsEx(this->handleArrayOr_.size(), this->handleArrayOr_.data(), sleepDelta, QS_ALLPOSTMESSAGE | QS_ALLINPUT | QS_ALLEVENTS, MWMO_INPUTAVAILABLE | MWMO_ALERTABLE);
|
||||
do
|
||||
{
|
||||
temp = ::MsgWaitForMultipleObjectsEx(this->handleArrayOr_.size(), this->handleArrayOr_.data(), sleepDelta, QS_ALLPOSTMESSAGE | QS_ALLINPUT | QS_ALLEVENTS, MWMO_INPUTAVAILABLE | MWMO_ALERTABLE);
|
||||
}
|
||||
while (status == WAIT_IO_COMPLETION);
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = ::WaitForMultipleObjectsEx(this->handleArrayOr_.size(), this->handleArrayOr_.data(), false, sleepDelta, true);
|
||||
do
|
||||
{
|
||||
temp = ::WaitForMultipleObjectsEx(this->handleArrayOr_.size(), this->handleArrayOr_.data(), false, sleepDelta, true);
|
||||
}
|
||||
while (status == WAIT_IO_COMPLETION);
|
||||
}
|
||||
|
||||
status = WaitToRetStatus(temp);
|
||||
|
Loading…
Reference in New Issue
Block a user