diff options
author | bunnei <bunneidev@gmail.com> | 2020-11-24 14:31:58 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-24 14:31:58 -0800 |
commit | 7791cc8c2e585dcc377e22a26f548db914250a5d (patch) | |
tree | 81273d60fee9da0146317881711b6f0b43650355 /src/core/core.cpp | |
parent | fbda5e9ec93fad65c86afd2c20695100651cd6e6 (diff) |
hle: services: Fix a crash with improper NVFlinger lifetime management. (#4977)
* hle: services: Fix a crash with improper NVFlinger lifetime management.
- This crash would happen when attempting to shutdown yuzu early on in boot.
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r-- | src/core/core.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index 5accdc783d..1aa477a291 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -187,7 +187,7 @@ struct System::Impl { service_manager = std::make_shared<Service::SM::ServiceManager>(kernel); - Service::Init(service_manager, system); + services = std::make_unique<Service::Services>(service_manager, system); GDBStub::DeferStart(); interrupt_manager = std::make_unique<Core::Hardware::InterruptManager>(system); @@ -296,7 +296,7 @@ struct System::Impl { // Shutdown emulation session GDBStub::Shutdown(); - Service::Shutdown(); + services.reset(); service_manager.reset(); cheat_engine.reset(); telemetry_session.reset(); @@ -306,8 +306,8 @@ struct System::Impl { cpu_manager.Shutdown(); // Shutdown kernel and core timing - kernel.Shutdown(); core_timing.Shutdown(); + kernel.Shutdown(); // Close app loader app_loader.reset(); @@ -398,6 +398,9 @@ struct System::Impl { /// Service manager std::shared_ptr<Service::SM::ServiceManager> service_manager; + /// Services + std::unique_ptr<Service::Services> services; + /// Telemetry session for this emulation session std::unique_ptr<Core::TelemetrySession> telemetry_session; |