char buffer[64 * 1024];
if (m_CurrentAction == TlsActionNone) {
- if (revents & (POLLIN | POLLERR | POLLHUP))
+ bool corked = IsCorked();
+ if (!corked && (revents & (POLLIN | POLLERR | POLLHUP)))
m_CurrentAction = TlsActionRead;
else if (m_SendQ->GetAvailableBytes() > 0 && (revents & POLLOUT))
m_CurrentAction = TlsActionWrite;
else {
- ChangeEvents(POLLIN);
+ if (corked)
+ ChangeEvents(0);
+ else
+ ChangeEvents(POLLIN);
+
return;
}
}
{
return m_Socket;
}
+
+void TlsStream::SetCorked(bool corked)
+{
+ Stream::SetCorked(corked);
+
+ boost::mutex::scoped_lock lock(m_Mutex);
+
+ if (corked)
+ m_CurrentAction = TlsActionNone;
+ else
+ ChangeEvents(POLLIN | POLLOUT);
+}
bool IsVerifyOK(void) const;
String GetVerifyError(void) const;
+ virtual void SetCorked(bool corked) override;
+
private:
boost::shared_ptr<SSL> m_SSL;
bool m_Eof;
bool HttpServerConnection::ProcessMessage(void)
{
-
bool res;
HttpResponse response(m_Stream, m_CurrentRequest);
return res;
}
+ m_Stream->SetCorked(true);
+
m_RequestQueue.Enqueue(std::bind(&HttpServerConnection::ProcessMessageAsync,
HttpServerConnection::Ptr(this), m_CurrentRequest, response, m_AuthenticatedUser));
response.Finish();
m_PendingRequests--;
+ m_Stream->SetCorked(false);
}
void HttpServerConnection::DataAvailableHandler(void)