[Lldb-commits] [lldb] [lldb] Fix deadlock between statusline and output mutex (PR #135956)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Wed Apr 16 05:39:44 PDT 2025
https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/135956
Fix a deadlock between the statusline mutex (in Debugger) and the output file mutex (in LockedStreamFile). The deadlock occurs when the main thread is calling the statusline callback while holding the output mutex in Editline, while the default event thread is trying to update the stausline.
rdar://149251156
>From 59e80e36a07922684dba14f421bca3176a6b5a13 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 16 Apr 2025 14:29:27 +0200
Subject: [PATCH] [lldb] Fix deadlock between statusline and output mutex
Fix a deadlock between the statusline mutex (in Debugger) and the output
file mutex (in LockedStreamFile). The deadlock occurs when the main
thread is calling the statusline callback while holding the output mutex
in Editline, while the default event thread is trying to update the
stausline.
rdar://149251156
---
lldb/source/Host/common/Editline.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lldb/source/Host/common/Editline.cpp b/lldb/source/Host/common/Editline.cpp
index 29abaf7c65f28..6900da9909eb8 100644
--- a/lldb/source/Host/common/Editline.cpp
+++ b/lldb/source/Host/common/Editline.cpp
@@ -567,8 +567,11 @@ int Editline::GetCharacter(EditLineGetCharType *c) {
m_needs_prompt_repaint = false;
}
- if (m_redraw_callback)
+ if (m_redraw_callback) {
+ m_locked_output.reset();
m_redraw_callback();
+ m_locked_output.emplace(m_output_stream_sp->Lock());
+ }
if (m_multiline_enabled) {
// Detect when the number of rows used for this input line changes due to
More information about the lldb-commits
mailing list