diff --git a/src/core/core.cpp b/src/core/core.cpp index 355a4f9741..e7a33ff793 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -476,9 +476,6 @@ struct System::Impl { room_member->SendGameInfo(game_info); } - // Reset all glue registrations - arp_manager->ResetAll(); - LOG_DEBUG(Core, "Shutdown OK"); } diff --git a/src/core/hle/service/server_manager.cpp b/src/core/hle/service/server_manager.cpp index 6b5b570671..fa6ab7f7e8 100644 --- a/src/core/hle/service/server_manager.cpp +++ b/src/core/hle/service/server_manager.cpp @@ -98,8 +98,10 @@ ServerManager::~ServerManager() { // Signal stop. m_stop_source.request_stop(); m_wakeup_event->Signal(m_system.Kernel()); + if (m_deferral_event) m_deferral_event->Signal(m_system.Kernel()); //for sm: and ports - // Wait for processing to stop. + + // Wait for processing to stop. Schedule m_stopped.Wait(); m_threads.clear(); @@ -258,6 +260,7 @@ void ServerManager::NotifyShutdown() { m_stop_source.request_stop(); // Wake them up regardless m_wakeup_event->Signal(m_system.Kernel()); + if (m_deferral_event) m_deferral_event->Signal(m_system.Kernel()); //for sm: and ports } Result ServerManager::LoopProcess() { diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index c75c5437df..b407122eb1 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp @@ -305,16 +305,14 @@ SM::SM(ServiceManager& service_manager_, Core::System& system_) SM::~SM() = default; void LoopProcess(Core::System& system) { - auto& service_manager = system.ServiceManager(); auto server_manager = std::make_unique(system); - Kernel::KEvent* deferral_event{}; server_manager->ManageDeferral(&deferral_event); - service_manager.SetDeferralEvent(deferral_event); - + system.ServiceManager().SetDeferralEvent(deferral_event); auto sm_service = std::make_shared(system.ServiceManager(), system); - server_manager->ManageNamedPort("sm:", [sm_service] { return sm_service; }); - + server_manager->ManageNamedPort("sm:", [sm_service] { + return sm_service; + }); ServerManager::RunServer(std::move(server_manager)); }