diff options
| author | 2020-03-30 21:50:05 -0400 | |
|---|---|---|
| committer | 2020-06-27 11:36:03 -0400 | |
| commit | 19165cd859dcbb1f7d5e2c74c831e5196c2d1c41 (patch) | |
| tree | b8ce4801d50c76b77daae42d9ca9841a2ac82778 /src/core/hle/kernel/svc.cpp | |
| parent | SingleCore: Improve Cycle timing Behavior and replace mutex in global schedul... (diff) | |
| download | yuzu-19165cd859dcbb1f7d5e2c74c831e5196c2d1c41.tar.gz yuzu-19165cd859dcbb1f7d5e2c74c831e5196c2d1c41.tar.xz yuzu-19165cd859dcbb1f7d5e2c74c831e5196c2d1c41.zip | |
HLE_IPC: Correct HLE Event behavior on timeout.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index c47fa9167..37e893c84 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -333,13 +333,21 @@ static ResultCode SendSyncRequest(Core::System& system, Handle handle) { | |||
| 333 | thread->SetStatus(ThreadStatus::WaitIPC); | 333 | thread->SetStatus(ThreadStatus::WaitIPC); |
| 334 | session->SendSyncRequest(SharedFrom(thread), system.Memory()); | 334 | session->SendSyncRequest(SharedFrom(thread), system.Memory()); |
| 335 | } | 335 | } |
| 336 | |||
| 336 | if (thread->HasHLECallback()) { | 337 | if (thread->HasHLECallback()) { |
| 337 | Handle event_handle = thread->GetHLETimeEvent(); | 338 | Handle event_handle = thread->GetHLETimeEvent(); |
| 338 | if (event_handle != InvalidHandle) { | 339 | if (event_handle != InvalidHandle) { |
| 339 | auto& time_manager = system.Kernel().TimeManager(); | 340 | auto& time_manager = system.Kernel().TimeManager(); |
| 340 | time_manager.UnscheduleTimeEvent(event_handle); | 341 | time_manager.UnscheduleTimeEvent(event_handle); |
| 341 | } | 342 | } |
| 342 | thread->InvokeHLECallback(SharedFrom(thread)); | 343 | |
| 344 | { | ||
| 345 | SchedulerLock lock(system.Kernel()); | ||
| 346 | auto* sync_object = thread->GetHLESyncObject(); | ||
| 347 | sync_object->RemoveWaitingThread(SharedFrom(thread)); | ||
| 348 | |||
| 349 | thread->InvokeHLECallback(SharedFrom(thread)); | ||
| 350 | } | ||
| 343 | } | 351 | } |
| 344 | 352 | ||
| 345 | return thread->GetSignalingResult(); | 353 | return thread->GetSignalingResult(); |