HLE_IPC: Correct HLE Event behavior on timeout.

This commit is contained in:
Fernando Sahmkow 2020-03-30 21:50:05 -04:00
parent 7e2ce2f7f4
commit 19165cd859
3 changed files with 19 additions and 1 deletions

View file

@ -333,13 +333,21 @@ static ResultCode SendSyncRequest(Core::System& system, Handle handle) {
thread->SetStatus(ThreadStatus::WaitIPC);
session->SendSyncRequest(SharedFrom(thread), system.Memory());
}
if (thread->HasHLECallback()) {
Handle event_handle = thread->GetHLETimeEvent();
if (event_handle != InvalidHandle) {
auto& time_manager = system.Kernel().TimeManager();
time_manager.UnscheduleTimeEvent(event_handle);
}
thread->InvokeHLECallback(SharedFrom(thread));
{
SchedulerLock lock(system.Kernel());
auto* sync_object = thread->GetHLESyncObject();
sync_object->RemoveWaitingThread(SharedFrom(thread));
thread->InvokeHLECallback(SharedFrom(thread));
}
}
return thread->GetSignalingResult();