Bladeren bron

am: stop emulation when all applets are closed

Liam 2 jaren geleden
bovenliggende
commit
8e0a40434c
1 gewijzigde bestanden met toevoegingen van 8 en 0 verwijderingen
  1. 8 0
      src/core/hle/service/am/applet_manager.cpp

+ 8 - 0
src/core/hle/service/am/applet_manager.cpp

@@ -221,6 +221,7 @@ void AppletManager::InsertApplet(std::shared_ptr<Applet> applet) {
 
 
 void AppletManager::TerminateAndRemoveApplet(AppletResourceUserId aruid) {
 void AppletManager::TerminateAndRemoveApplet(AppletResourceUserId aruid) {
     std::shared_ptr<Applet> applet;
     std::shared_ptr<Applet> applet;
+    bool should_stop = false;
     {
     {
         std::scoped_lock lk{m_lock};
         std::scoped_lock lk{m_lock};
 
 
@@ -231,10 +232,17 @@ void AppletManager::TerminateAndRemoveApplet(AppletResourceUserId aruid) {
 
 
         applet = it->second;
         applet = it->second;
         m_applets.erase(it);
         m_applets.erase(it);
+
+        should_stop = m_applets.empty();
     }
     }
 
 
     // Terminate process.
     // Terminate process.
     applet->process->Terminate();
     applet->process->Terminate();
+
+    // If there were no applets left, stop emulation.
+    if (should_stop) {
+        m_system.Exit();
+    }
 }
 }
 
 
 void AppletManager::CreateAndInsertByFrontendAppletParameters(
 void AppletManager::CreateAndInsertByFrontendAppletParameters(