diff options
| author | bunnei <bunneidev@gmail.com> | 2021-06-07 21:10:51 -0700 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2021-06-07 21:10:51 -0700 |
| commit | a493ab2678078ce2066e8120ec93c0f6b4274df6 (patch) | |
| tree | 41178195f09f5622246f44311f0b8727240e5624 /src/core/hle/kernel/k_server_session.cpp | |
| parent | df91c9f5e68c253d5e60d26e8d35e6bc423f0571 (diff) | |
hle: kernel: Remove service thread manager and use weak_ptr.
- We no longer need to queue up service threads to be destroyed.
- Fixes a race condition where a thread could be destroyed too early, which caused a crash in Pokemon Sword/Shield.
Diffstat (limited to 'src/core/hle/kernel/k_server_session.cpp')
| -rw-r--r-- | src/core/hle/kernel/k_server_session.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index 528ca8614..61213c20e 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -119,7 +119,7 @@ ResultCode KServerSession::QueueSyncRequest(KThread* thread, Core::Memory::Memor context->PopulateFromIncomingCommandBuffer(kernel.CurrentProcess()->GetHandleTable(), cmd_buf); - if (auto strong_ptr = manager->GetServiceThread(); strong_ptr) { + if (auto strong_ptr = manager->GetServiceThread().lock()) { strong_ptr->QueueSyncRequest(*parent, std::move(context)); return ResultSuccess; } else { |
