Fix deadlock in HttpClientConnection::DataAvailableHandler

refs #11014
This commit is contained in:
Gunnar Beutner 2016-02-01 14:50:18 +01:00
parent e6a972f975
commit ec050dd2a7

View File

@ -137,10 +137,13 @@ bool HttpClientConnection::ProcessMessage(void)
void HttpClientConnection::DataAvailableHandler(const Stream::Ptr& stream) void HttpClientConnection::DataAvailableHandler(const Stream::Ptr& stream)
{ {
boost::mutex::scoped_lock lock(m_DataHandlerMutex);
ASSERT(stream == m_Stream); ASSERT(stream == m_Stream);
bool close = false;
if (!m_Stream->IsEof()) {
boost::mutex::scoped_lock lock(m_DataHandlerMutex);
try { try {
while (ProcessMessage()) while (ProcessMessage())
; /* empty loop body */ ; /* empty loop body */
@ -148,13 +151,14 @@ void HttpClientConnection::DataAvailableHandler(const Stream::Ptr& stream)
Log(LogWarning, "HttpClientConnection") Log(LogWarning, "HttpClientConnection")
<< "Error while reading Http response: " << DiagnosticInformation(ex); << "Error while reading Http response: " << DiagnosticInformation(ex);
close = true;
Disconnect(); Disconnect();
} }
} else
close = true;
if (m_Context.Eof) { if (close)
Log(LogWarning, "HttpClientConnection", "Encountered unexpected EOF while reading Http response.");
m_Stream->Close(); m_Stream->Close();
}
} }
boost::shared_ptr<HttpRequest> HttpClientConnection::NewRequest(void) boost::shared_ptr<HttpRequest> HttpClientConnection::NewRequest(void)