Kernel: Correct Cancel Synchronization.

This commit corrects the behavior of cancel synchronization when the
thread is running/ready and ensures the next wait is cancelled as it's
suppose to.
This commit is contained in:
Fernando Sahmkow 2019-11-16 11:05:39 -04:00 committed by FernandoS27
parent bb31df62bb
commit 7d16b2d2dd
3 changed files with 19 additions and 2 deletions

View file

@ -132,8 +132,11 @@ void Thread::ResumeFromWait() {
}
void Thread::CancelWait() {
ASSERT(GetStatus() == ThreadStatus::WaitSynch);
ClearWaitObjects();
if (GetSchedulingStatus() != ThreadSchedStatus::Paused) {
is_sync_cancelled = true;
return;
}
is_sync_cancelled = false;
SetWaitSynchronizationResult(ERR_SYNCHRONIZATION_CANCELED);
ResumeFromWait();
}