mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-31 06:04:58 +00:00
Fix rare failure in TestProcessIO
Summary: There was a race condition in Process class, where we would not wait for process stdout to propagate fully before we would shut down the connection (repro case: slow down the stdio thread by placing a sleep right at the end of the while loop in Communication::ReadThread). The Process class already tried to solve this problem by synchronizing with the read thread in Process::ShouldBroadcastEvent, but unfortunately the connection got closed before that in Process::SetExitStatus. I solve this issue by delaying the connection shutdown until we get a chance to process the event and synchronize. Alternatively, I could have moved the synchronization point to an earlier point in SetExitStatus, but it seems safer to delay the shutdown until other things get a chance to notice the process has exited. Reviewers: clayborg, ovyalov Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D12558 llvm-svn: 246753
This commit is contained in:
parent
61efbc32a6
commit
a9a43373e1
@ -1479,12 +1479,7 @@ Process::SetExitStatus (int status, const char *cstr)
|
||||
else
|
||||
m_exit_string.clear();
|
||||
|
||||
// When we exit, we no longer need to the communication channel
|
||||
m_stdio_communication.Disconnect();
|
||||
m_stdio_communication.StopReadThread();
|
||||
m_stdin_forward = false;
|
||||
|
||||
// And we don't need the input reader anymore as well
|
||||
// When we exit, we don't need the input reader anymore
|
||||
if (m_process_input_reader)
|
||||
{
|
||||
m_process_input_reader->SetIsDone(true);
|
||||
@ -4159,6 +4154,10 @@ Process::ShouldBroadcastEvent (Event *event_ptr)
|
||||
case eStateExited:
|
||||
case eStateUnloaded:
|
||||
m_stdio_communication.SynchronizeWithReadThread();
|
||||
m_stdio_communication.Disconnect();
|
||||
m_stdio_communication.StopReadThread();
|
||||
m_stdin_forward = false;
|
||||
|
||||
// fall-through
|
||||
case eStateConnected:
|
||||
case eStateAttaching:
|
||||
|
Loading…
x
Reference in New Issue
Block a user