diff options
author | Feng Chen <vonchenplus@gmail.com> | 2021-09-25 22:16:21 +0800 |
---|---|---|
committer | Feng Chen <vonchenplus@gmail.com> | 2021-09-25 22:16:21 +0800 |
commit | 7cd43b139a935ed0b7bc34a31620c3ffb70c7e48 (patch) | |
tree | b461fe51dff478144c34920cd12307987fdb8eb8 /src | |
parent | 4baef7905e88fae7a3486d24bf7a111ad4d30b8a (diff) |
Fix KScopedAutoObject object leak when SendSyncRequest
Diffstat (limited to 'src')
-rw-r--r-- | src/core/hle/kernel/svc.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 62fb06c45..f98f24a60 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -320,17 +320,19 @@ static ResultCode SendSyncRequest(Core::System& system, Handle handle) { auto& kernel = system.Kernel(); - KScopedAutoObject session = - kernel.CurrentProcess()->GetHandleTable().GetObject<KClientSession>(handle); - R_UNLESS(session.IsNotNull(), ResultInvalidHandle); - LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}({})", handle, session->GetName()); - auto thread = kernel.CurrentScheduler()->GetCurrentThread(); { KScopedSchedulerLock lock(kernel); thread->SetState(ThreadState::Waiting); thread->SetWaitReasonForDebugging(ThreadWaitReasonForDebugging::IPC); - session->SendSyncRequest(thread, system.Memory(), system.CoreTiming()); + + { + KScopedAutoObject session = + kernel.CurrentProcess()->GetHandleTable().GetObject<KClientSession>(handle); + R_UNLESS(session.IsNotNull(), ResultInvalidHandle); + LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}({})", handle, session->GetName()); + session->SendSyncRequest(thread, system.Memory(), system.CoreTiming()); + } } KSynchronizationObject* dummy{}; |