forked from OSchip/llvm-project
Fix on Linux for ReadThread lingering after inferior exits
See this email thread: http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20140818/012487.html This patch handles the case where the inferior process exits but leaves the ReadThread in a continuous loop reading from the communication pipe. On MacOSX, the ReadThread exits when it receives a 0 return value from the read due to EOF. On Linux the read returns -1 and sets errno to EIO error, this does not currently cause the thread to shutdown so it continues to read from the comm. In Communication::ReadThread I added a handler for eConnectionStatusError to disconnect and shutdown the thread. Change by Alex Pepper. llvm-svn: 216194
This commit is contained in:
parent
dfdda0d41c
commit
4262828132
|
@ -380,13 +380,24 @@ Communication::ReadThread (lldb::thread_arg_t p)
|
|||
if (comm->GetCloseOnEOF())
|
||||
done = true;
|
||||
break;
|
||||
case eConnectionStatusError: // Check GetError() for details
|
||||
if (error.GetType() == eErrorTypePOSIX && error.GetError() == EIO)
|
||||
{
|
||||
// EIO on a pipe is usually caused by remote shutdown
|
||||
comm->Disconnect ();
|
||||
done = true;
|
||||
}
|
||||
if (log)
|
||||
error.LogIfError (log,
|
||||
"%p Communication::ReadFromConnection () => status = %s",
|
||||
p,
|
||||
Communication::ConnectionStatusAsCString (status));
|
||||
break;
|
||||
case eConnectionStatusNoConnection: // No connection
|
||||
case eConnectionStatusLostConnection: // Lost connection while connected to a valid connection
|
||||
case eConnectionStatusInterrupted: // Interrupted
|
||||
|
||||
done = true;
|
||||
// Fall through...
|
||||
case eConnectionStatusError: // Check GetError() for details
|
||||
case eConnectionStatusTimedOut: // Request timed out
|
||||
if (log)
|
||||
error.LogIfError (log,
|
||||
|
|
Loading…
Reference in New Issue