qt: unlock during signal emission
This commit is contained in:
parent
fda0e7e989
commit
385ddef8c3
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue