From 13a05b99d3f6216b5bf7e1f9637211e648929c04 Mon Sep 17 00:00:00 2001 From: saker Date: Sun, 30 Jun 2024 14:54:20 -0400 Subject: [PATCH] Use recursive mutex for `requestChangeInModel`/`doneChangeInModel` (#7359) * Make model change mutex recursive * Initialize s_renderingThread --- include/AudioEngine.h | 2 +- src/core/AudioEngine.cpp | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/include/AudioEngine.h b/include/AudioEngine.h index 5e94ea6a2..923bc0092 100644 --- a/include/AudioEngine.h +++ b/include/AudioEngine.h @@ -410,7 +410,7 @@ private: bool m_clearSignal; - std::mutex m_changeMutex; + std::recursive_mutex m_changeMutex; friend class Engine; friend class AudioEngineWorkerThread; diff --git a/src/core/AudioEngine.cpp b/src/core/AudioEngine.cpp index 8bb8648ac..8e4cc8e29 100644 --- a/src/core/AudioEngine.cpp +++ b/src/core/AudioEngine.cpp @@ -66,8 +66,7 @@ namespace lmms using LocklessListElement = LocklessList::Element; -static thread_local bool s_renderingThread; -static thread_local bool s_runningChange; +static thread_local bool s_renderingThread = false; @@ -758,16 +757,14 @@ void AudioEngine::removePlayHandlesOfTypes(Track * track, PlayHandle::Types type void AudioEngine::requestChangeInModel() { - if (s_renderingThread || s_runningChange) { return; } + if (s_renderingThread) { return; } m_changeMutex.lock(); - s_runningChange = true; } void AudioEngine::doneChangeInModel() { - if (s_renderingThread || !s_runningChange) { return; } + if (s_renderingThread) { return; } m_changeMutex.unlock(); - s_runningChange = false; } bool AudioEngine::isAudioDevNameValid(QString name)