mirror of https://github.com/Icinga/icinga2.git
Use cork in tlsstream and HTTP connection
This commit is contained in:
parent
419103b407
commit
8b334fe259
|
@ -152,12 +152,17 @@ void TlsStream::OnEvent(int revents)
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
@ -404,3 +409,15 @@ Socket::Ptr TlsStream::GetSocket(void) const
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -73,6 +73,8 @@ public:
|
|||
bool IsVerifyOK(void) const;
|
||||
String GetVerifyError(void) const;
|
||||
|
||||
virtual void SetCorked(bool corked) override;
|
||||
|
||||
private:
|
||||
boost::shared_ptr<SSL> m_SSL;
|
||||
bool m_Eof;
|
||||
|
|
|
@ -97,7 +97,6 @@ void HttpServerConnection::Disconnect(void)
|
|||
|
||||
bool HttpServerConnection::ProcessMessage(void)
|
||||
{
|
||||
|
||||
bool res;
|
||||
HttpResponse response(m_Stream, m_CurrentRequest);
|
||||
|
||||
|
@ -175,6 +174,8 @@ bool HttpServerConnection::ProcessMessage(void)
|
|||
return res;
|
||||
}
|
||||
|
||||
m_Stream->SetCorked(true);
|
||||
|
||||
m_RequestQueue.Enqueue(std::bind(&HttpServerConnection::ProcessMessageAsync,
|
||||
HttpServerConnection::Ptr(this), m_CurrentRequest, response, m_AuthenticatedUser));
|
||||
|
||||
|
@ -328,6 +329,7 @@ void HttpServerConnection::ProcessMessageAsync(HttpRequest& request, HttpRespons
|
|||
|
||||
response.Finish();
|
||||
m_PendingRequests--;
|
||||
m_Stream->SetCorked(false);
|
||||
}
|
||||
|
||||
void HttpServerConnection::DataAvailableHandler(void)
|
||||
|
|
Loading…
Reference in New Issue