Просмотр исходного кода

hle: service: sm: Fix GetService setup of session & port.

bunnei 5 лет назад
Родитель
Сommit
ec5674a6ad
2 измененных файлов с 5 добавлено и 5 удалено
  1. 1 1
      src/core/hle/kernel/k_client_port.cpp
  2. 4 4
      src/core/hle/service/sm/sm.cpp

+ 1 - 1
src/core/hle/kernel/k_client_port.cpp

@@ -66,7 +66,7 @@ ResultCode KClientPort::CreateSession(KClientSession** out,
     // Update the session counts.
     {
         // Atomically increment the number of sessions.
-        s32 new_sessions;
+        s32 new_sessions{};
         {
             const auto max = max_sessions;
             auto cur_sessions = num_sessions.load(std::memory_order_acquire);

+ 4 - 4
src/core/hle/service/sm/sm.cpp

@@ -164,18 +164,18 @@ ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(Kernel::HLERequestContext&
     R_UNLESS(session_reservation.Succeeded(), Kernel::ResultLimitReached);
 
     // Create a new session.
-    auto* session = Kernel::KSession::Create(kernel);
-    session->Initialize(&port->GetClientPort(), std::move(name));
+    Kernel::KClientSession* session{};
+    port->GetClientPort().CreateSession(std::addressof(session));
 
     // Commit the session reservation.
     session_reservation.Commit();
 
     // Enqueue the session with the named port.
-    port->EnqueueSession(&session->GetServerSession());
+    port->EnqueueSession(&session->GetParent()->GetServerSession());
 
     LOG_DEBUG(Service_SM, "called service={} -> session={}", name, session->GetId());
 
-    return MakeResult(&session->GetClientSession());
+    return MakeResult(session);
 }
 
 void SM::RegisterService(Kernel::HLERequestContext& ctx) {