qt: unlock during signal emission

This commit is contained in:
Liam 2023-01-10 12:46:01 -05:00
parent fda0e7e989
commit 385ddef8c3
2 changed files with 21 additions and 2 deletions

View File

@ -96,9 +96,9 @@ void EmuThread::run() {
m_is_running.store(false); m_is_running.store(false);
m_is_running.notify_all(); m_is_running.notify_all();
emit DebugModeEntered(); EmulationPaused(lk);
Common::CondvarWait(m_should_run_cv, lk, stop_token, [&] { return m_should_run; }); 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 #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 #ifdef HAS_OPENGL
class OpenGLSharedContext : public Core::Frontend::GraphicsContext { class OpenGLSharedContext : public Core::Frontend::GraphicsContext {
public: public:

View File

@ -91,6 +91,10 @@ public:
m_stop_source.request_stop(); m_stop_source.request_stop();
} }
private:
void EmulationPaused(std::unique_lock<std::mutex>& lk);
void EmulationResumed(std::unique_lock<std::mutex>& lk);
private: private:
Core::System& m_system; Core::System& m_system;