From 9fc2fff68a7614e91052b7f643759c62020b7ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 11 Jul 2026 22:08:18 +0200 Subject: [PATCH] Fix lock around vkey queue in EmuScreen --- UI/EmuScreen.cpp | 11 +++++++++-- UI/EmuScreen.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 91836f7a59..e1639f4d1f 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -733,14 +733,21 @@ static void ShowFpsLimitNotice() { void EmuScreen::OnVKey(VirtKey virtualKeyCode, bool down) { if (!IsOnTop()) return; + std::lock_guard lock(queuedVirtKeysLock_); queuedVirtKeys_.push_back(std::make_pair(virtualKeyCode, down)); } void EmuScreen::ProcessQueuedVKeys() { - for (auto iter : queuedVirtKeys_) { + std::vector> dequeued; + { + std::lock_guard lock(queuedVirtKeysLock_); + dequeued = std::move(queuedVirtKeys_); + queuedVirtKeys_.clear(); + } + + for (auto iter : dequeued) { ProcessVKey(iter.first, iter.second); } - queuedVirtKeys_.clear(); } // Synchronized processing of virtkeys. diff --git a/UI/EmuScreen.h b/UI/EmuScreen.h index 3fe396453e..82bf1d4eb2 100644 --- a/UI/EmuScreen.h +++ b/UI/EmuScreen.h @@ -154,6 +154,7 @@ private: bool lastImguiEnabled_ = false; + std::mutex queuedVirtKeysLock_; std::vector> queuedVirtKeys_; ImGuiContext *ctx_ = nullptr;