teemperor added a reviewer: labath.
teemperor added a subscriber: labath.
teemperor added a comment.
Adding Pavel because he wrote the PrintAsync code.
Also @labath: Can you tell me what variables/functionality the `m_output_mutex`
in Editline.cpp is supposed to shield? I don't see any documentation for that.
The `m_output_mutex` name suggests its related to console output, but we
actually take the lock also when reading *input*. Especially in
`EditLine::GetLine` we take a guard on the lock but then somehow unlock the
guarded mutex from inside `Editline::GetCharacter` that we call afterwards
(which completely breaks this patch):
// This mutex is locked by our caller (GetLine). Unlock it while we read a
// character (blocking operation), so we do not hold the mutex
// indefinitely. This gives a chance for someone to interrupt us. After
// Read returns, immediately lock the mutex again and check if we were
// interrupted.
m_output_mutex.unlock();
int read_count = m_input_connection.Read(&ch, 1, llvm::None, status, NULL);
m_output_mutex.lock();
if (m_editor_status == EditorStatus::Interrupted) {
while (read_count > 0 && status == lldb::eConnectionStatusSuccess)
read_count = m_input_connection.Read(&ch, 1, llvm::None, status, NULL);
lldbassert(status == lldb::eConnectionStatusInterrupted);
return 0;
}
https://reviews.llvm.org/D48463
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits