From 3610b8dd9352078e781ef0f72ed10b95a258a713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Thu, 10 Nov 2022 21:07:37 +0100 Subject: [PATCH] LibAudio: Restore exact audio enqueuer thread mutex behavior This was changed with a recent move to MutexLocker, but the exact previous behavior is safer as it holds the lock for the minimum amount of time in both locations. We don't want to introduce these kinds of subtle bugs. --- .../Libraries/LibAudio/ConnectionToServer.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibAudio/ConnectionToServer.cpp b/Userland/Libraries/LibAudio/ConnectionToServer.cpp index 5d61fa19e0..0d90cbaa50 100644 --- a/Userland/Libraries/LibAudio/ConnectionToServer.cpp +++ b/Userland/Libraries/LibAudio/ConnectionToServer.cpp @@ -27,8 +27,10 @@ ConnectionToServer::ConnectionToServer(NonnullOwnPtr Core::EventLoop enqueuer_loop; m_enqueuer_loop = &enqueuer_loop; enqueuer_loop.exec(); - Threading::MutexLocker const locker(m_enqueuer_loop_destruction); - m_enqueuer_loop = nullptr; + { + Threading::MutexLocker const locker(m_enqueuer_loop_destruction); + m_enqueuer_loop = nullptr; + } return (intptr_t) nullptr; })) { @@ -43,10 +45,13 @@ ConnectionToServer::~ConnectionToServer() void ConnectionToServer::die() { - // We're sometimes getting here after the other thread has already exited and its event loop does no longer exist. - if (Threading::MutexLocker const locker(m_enqueuer_loop_destruction); m_enqueuer_loop != nullptr) { - m_enqueuer_loop->wake(); - m_enqueuer_loop->quit(0); + { + Threading::MutexLocker const locker(m_enqueuer_loop_destruction); + // We're sometimes getting here after the other thread has already exited and its event loop does no longer exist. + if (m_enqueuer_loop != nullptr) { + m_enqueuer_loop->wake(); + m_enqueuer_loop->quit(0); + } } (void)m_background_audio_enqueuer->join(); }