diff options
Diffstat (limited to 'src/core/core.cpp')
| -rw-r--r-- | src/core/core.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 60e2efddc..9e8936728 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -47,6 +47,7 @@ | |||
| 47 | #include "core/hle/service/psc/time/system_clock.h" | 47 | #include "core/hle/service/psc/time/system_clock.h" |
| 48 | #include "core/hle/service/psc/time/time_zone_service.h" | 48 | #include "core/hle/service/psc/time/time_zone_service.h" |
| 49 | #include "core/hle/service/service.h" | 49 | #include "core/hle/service/service.h" |
| 50 | #include "core/hle/service/services.h" | ||
| 50 | #include "core/hle/service/set/system_settings_server.h" | 51 | #include "core/hle/service/set/system_settings_server.h" |
| 51 | #include "core/hle/service/sm/sm.h" | 52 | #include "core/hle/service/sm/sm.h" |
| 52 | #include "core/internal_network/network.h" | 53 | #include "core/internal_network/network.h" |
| @@ -310,7 +311,8 @@ struct System::Impl { | |||
| 310 | audio_core = std::make_unique<AudioCore::AudioCore>(system); | 311 | audio_core = std::make_unique<AudioCore::AudioCore>(system); |
| 311 | 312 | ||
| 312 | service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); | 313 | service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); |
| 313 | services = std::make_unique<Service::Services>(service_manager, system); | 314 | services = |
| 315 | std::make_unique<Service::Services>(service_manager, system, stop_event.get_token()); | ||
| 314 | 316 | ||
| 315 | is_powered_on = true; | 317 | is_powered_on = true; |
| 316 | exit_locked = false; | 318 | exit_locked = false; |
| @@ -458,6 +460,7 @@ struct System::Impl { | |||
| 458 | gpu_core->NotifyShutdown(); | 460 | gpu_core->NotifyShutdown(); |
| 459 | } | 461 | } |
| 460 | 462 | ||
| 463 | stop_event.request_stop(); | ||
| 461 | core_timing.SyncPause(false); | 464 | core_timing.SyncPause(false); |
| 462 | Network::CancelPendingSocketOperations(); | 465 | Network::CancelPendingSocketOperations(); |
| 463 | kernel.SuspendEmulation(true); | 466 | kernel.SuspendEmulation(true); |
| @@ -478,6 +481,7 @@ struct System::Impl { | |||
| 478 | cpu_manager.Shutdown(); | 481 | cpu_manager.Shutdown(); |
| 479 | debugger.reset(); | 482 | debugger.reset(); |
| 480 | kernel.Shutdown(); | 483 | kernel.Shutdown(); |
| 484 | stop_event = {}; | ||
| 481 | Network::RestartSocketOperations(); | 485 | Network::RestartSocketOperations(); |
| 482 | 486 | ||
| 483 | if (auto room_member = room_network.GetRoomMember().lock()) { | 487 | if (auto room_member = room_network.GetRoomMember().lock()) { |
| @@ -613,6 +617,7 @@ struct System::Impl { | |||
| 613 | 617 | ||
| 614 | ExecuteProgramCallback execute_program_callback; | 618 | ExecuteProgramCallback execute_program_callback; |
| 615 | ExitCallback exit_callback; | 619 | ExitCallback exit_callback; |
| 620 | std::stop_source stop_event; | ||
| 616 | 621 | ||
| 617 | std::array<u64, Core::Hardware::NUM_CPU_CORES> dynarmic_ticks{}; | 622 | std::array<u64, Core::Hardware::NUM_CPU_CORES> dynarmic_ticks{}; |
| 618 | std::array<MicroProfileToken, Core::Hardware::NUM_CPU_CORES> microprofile_cpu{}; | 623 | std::array<MicroProfileToken, Core::Hardware::NUM_CPU_CORES> microprofile_cpu{}; |