diff options
| -rw-r--r-- | src/core/hle/kernel/service_thread.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/core/hle/kernel/service_thread.cpp b/src/core/hle/kernel/service_thread.cpp index 04be8a502..2ae80beca 100644 --- a/src/core/hle/kernel/service_thread.cpp +++ b/src/core/hle/kernel/service_thread.cpp | |||
| @@ -74,21 +74,17 @@ void ServiceThread::Impl::QueueSyncRequest(KSession& session, | |||
| 74 | { | 74 | { |
| 75 | std::unique_lock lock{queue_mutex}; | 75 | std::unique_lock lock{queue_mutex}; |
| 76 | 76 | ||
| 77 | auto* server_session{&session.GetServerSession()}; | ||
| 78 | |||
| 77 | // Open a reference to the session to ensure it is not closes while the service request | 79 | // Open a reference to the session to ensure it is not closes while the service request |
| 78 | // completes asynchronously. | 80 | // completes asynchronously. |
| 79 | session.Open(); | 81 | server_session->Open(); |
| 80 | 82 | ||
| 81 | requests.emplace([session_ptr{&session}, context{std::move(context)}]() { | 83 | requests.emplace([server_session, context{std::move(context)}]() { |
| 82 | // Close the reference. | 84 | // Close the reference. |
| 83 | SCOPE_EXIT({ session_ptr->Close(); }); | 85 | SCOPE_EXIT({ server_session->Close(); }); |
| 84 | |||
| 85 | // If the session has been closed, we are done. | ||
| 86 | if (session_ptr->IsServerClosed()) { | ||
| 87 | return; | ||
| 88 | } | ||
| 89 | 86 | ||
| 90 | // Complete the service request. | 87 | // Complete the service request. |
| 91 | KScopedAutoObject server_session{&session_ptr->GetServerSession()}; | ||
| 92 | server_session->CompleteSyncRequest(*context); | 88 | server_session->CompleteSyncRequest(*context); |
| 93 | }); | 89 | }); |
| 94 | } | 90 | } |