diff options
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index b83ee3e69..28c45e8a3 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -22,9 +22,9 @@ | |||
| 22 | #include "core/core_timing_util.h" | 22 | #include "core/core_timing_util.h" |
| 23 | #include "core/cpu_manager.h" | 23 | #include "core/cpu_manager.h" |
| 24 | #include "core/hle/kernel/client_port.h" | 24 | #include "core/hle/kernel/client_port.h" |
| 25 | #include "core/hle/kernel/client_session.h" | ||
| 26 | #include "core/hle/kernel/handle_table.h" | 25 | #include "core/hle/kernel/handle_table.h" |
| 27 | #include "core/hle/kernel/k_address_arbiter.h" | 26 | #include "core/hle/kernel/k_address_arbiter.h" |
| 27 | #include "core/hle/kernel/k_client_session.h" | ||
| 28 | #include "core/hle/kernel/k_condition_variable.h" | 28 | #include "core/hle/kernel/k_condition_variable.h" |
| 29 | #include "core/hle/kernel/k_event.h" | 29 | #include "core/hle/kernel/k_event.h" |
| 30 | #include "core/hle/kernel/k_memory_block.h" | 30 | #include "core/hle/kernel/k_memory_block.h" |
| @@ -323,12 +323,12 @@ static ResultCode ConnectToNamedPort(Core::System& system, Handle* out_handle, | |||
| 323 | 323 | ||
| 324 | auto client_port = it->second; | 324 | auto client_port = it->second; |
| 325 | 325 | ||
| 326 | std::shared_ptr<ClientSession> client_session; | 326 | KClientSession* client_session{}; |
| 327 | CASCADE_RESULT(client_session, client_port->Connect()); | 327 | CASCADE_RESULT(client_session, client_port->Connect()); |
| 328 | 328 | ||
| 329 | // Return the client session | 329 | // Return the client session |
| 330 | auto& handle_table = kernel.CurrentProcess()->GetHandleTable(); | 330 | auto& handle_table = kernel.CurrentProcess()->GetHandleTable(); |
| 331 | CASCADE_RESULT(*out_handle, handle_table.Create(client_session.get())); | 331 | CASCADE_RESULT(*out_handle, handle_table.Create(client_session)); |
| 332 | return RESULT_SUCCESS; | 332 | return RESULT_SUCCESS; |
| 333 | } | 333 | } |
| 334 | 334 | ||
| @@ -340,15 +340,13 @@ static ResultCode ConnectToNamedPort32(Core::System& system, Handle* out_handle, | |||
| 340 | 340 | ||
| 341 | /// Makes a blocking IPC call to an OS service. | 341 | /// Makes a blocking IPC call to an OS service. |
| 342 | static ResultCode SendSyncRequest(Core::System& system, Handle handle) { | 342 | static ResultCode SendSyncRequest(Core::System& system, Handle handle) { |
| 343 | LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}({})", handle, session->GetName()); | ||
| 344 | |||
| 343 | auto& kernel = system.Kernel(); | 345 | auto& kernel = system.Kernel(); |
| 344 | const auto& handle_table = kernel.CurrentProcess()->GetHandleTable(); | ||
| 345 | auto session = handle_table.Get<ClientSession>(handle); | ||
| 346 | if (!session) { | ||
| 347 | LOG_ERROR(Kernel_SVC, "called with invalid handle=0x{:08X}", handle); | ||
| 348 | return ResultInvalidHandle; | ||
| 349 | } | ||
| 350 | 346 | ||
| 351 | LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}({})", handle, session->GetName()); | 347 | KScopedAutoObject session = |
| 348 | kernel.CurrentProcess()->GetHandleTable().GetObject<KClientSession>(handle); | ||
| 349 | R_UNLESS(session.IsNotNull(), ResultInvalidHandle); | ||
| 352 | 350 | ||
| 353 | auto thread = kernel.CurrentScheduler()->GetCurrentThread(); | 351 | auto thread = kernel.CurrentScheduler()->GetCurrentThread(); |
| 354 | { | 352 | { |