diff options
| -rw-r--r-- | src/yuzu/bootmanager.cpp | 19 | ||||
| -rw-r--r-- | src/yuzu/bootmanager.h | 4 | 
2 files changed, 21 insertions, 2 deletions
| diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp index 3d560f303..d65991734 100644 --- a/src/yuzu/bootmanager.cpp +++ b/src/yuzu/bootmanager.cpp @@ -96,9 +96,9 @@ void EmuThread::run() {              m_is_running.store(false);              m_is_running.notify_all(); -            emit DebugModeEntered(); +            EmulationPaused(lk);              Common::CondvarWait(m_should_run_cv, lk, stop_token, [&] { return m_should_run; }); -            emit DebugModeLeft(); +            EmulationResumed(lk);          }      } @@ -111,6 +111,21 @@ void EmuThread::run() {  #endif  } +// Unlock while emitting signals so that the main thread can +// continue pumping events. + +void EmuThread::EmulationPaused(std::unique_lock<std::mutex>& lk) { +    lk.unlock(); +    emit DebugModeEntered(); +    lk.lock(); +} + +void EmuThread::EmulationResumed(std::unique_lock<std::mutex>& lk) { +    lk.unlock(); +    emit DebugModeLeft(); +    lk.lock(); +} +  #ifdef HAS_OPENGL  class OpenGLSharedContext : public Core::Frontend::GraphicsContext {  public: diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h index eca16b313..092c6206f 100644 --- a/src/yuzu/bootmanager.h +++ b/src/yuzu/bootmanager.h @@ -92,6 +92,10 @@ public:      }  private: +    void EmulationPaused(std::unique_lock<std::mutex>& lk); +    void EmulationResumed(std::unique_lock<std::mutex>& lk); + +private:      Core::System& m_system;      std::stop_source m_stop_source; | 
