yuzu-emu
/
yuzu-android
Archived
1
0
Fork 0

Fix KScopedAutoObject object leak when SendSyncRequest

This commit is contained in:
Feng Chen 2021-09-25 22:16:21 +08:00
parent 4baef7905e
commit 7cd43b139a
1 changed files with 8 additions and 6 deletions

View File

@ -320,18 +320,20 @@ static ResultCode SendSyncRequest(Core::System& system, Handle handle) {
auto& kernel = system.Kernel(); 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(); auto thread = kernel.CurrentScheduler()->GetCurrentThread();
{ {
KScopedSchedulerLock lock(kernel); KScopedSchedulerLock lock(kernel);
thread->SetState(ThreadState::Waiting); thread->SetState(ThreadState::Waiting);
thread->SetWaitReasonForDebugging(ThreadWaitReasonForDebugging::IPC); thread->SetWaitReasonForDebugging(ThreadWaitReasonForDebugging::IPC);
{
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()); session->SendSyncRequest(thread, system.Memory(), system.CoreTiming());
} }
}
KSynchronizationObject* dummy{}; KSynchronizationObject* dummy{};
return thread->GetWaitResult(std::addressof(dummy)); return thread->GetWaitResult(std::addressof(dummy));