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

am: stop emulation when all applets are closed

Liam 2 лет назад
Родитель
Сommit
8e0a40434c
1 измененных файлов с 8 добавлено и 0 удалено
  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) {
     std::shared_ptr<Applet> applet;
+    bool should_stop = false;
     {
         std::scoped_lock lk{m_lock};
 
@@ -231,10 +232,17 @@ void AppletManager::TerminateAndRemoveApplet(AppletResourceUserId aruid) {
 
         applet = it->second;
         m_applets.erase(it);
+
+        should_stop = m_applets.empty();
     }
 
     // Terminate process.
     applet->process->Terminate();
+
+    // If there were no applets left, stop emulation.
+    if (should_stop) {
+        m_system.Exit();
+    }
 }
 
 void AppletManager::CreateAndInsertByFrontendAppletParameters(