]> granicus.if.org Git - icinga2/commitdiff
Fix requests not being closed correctly
authorNoah Hilverling <noah.hilverling@icinga.com>
Mon, 19 Feb 2018 09:47:14 +0000 (10:47 +0100)
committerJean Flach <jean-marcel.flach@icinga.com>
Tue, 20 Feb 2018 12:32:04 +0000 (13:32 +0100)
lib/remote/httpserverconnection.cpp

index 7c86f9be9a17a813a47782a2170628fda1d04fbb..4fba15cb60e6cf9219f5d2095741573633f06810 100644 (file)
@@ -107,7 +107,11 @@ bool HttpServerConnection::ProcessMessage()
                        response.WriteBody(msg.CStr(), msg.GetLength());
                        response.Finish();
 
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                } catch (const std::exception& ex) {
                        response.SetStatus(500, "Internal Server Error");
@@ -115,7 +119,11 @@ bool HttpServerConnection::ProcessMessage()
                        response.WriteBody(msg.CStr(), msg.GetLength());
                        response.Finish();
 
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                }
                return res;
@@ -124,7 +132,11 @@ bool HttpServerConnection::ProcessMessage()
        if (!m_CurrentRequest.CompleteHeaderCheck) {
                m_CurrentRequest.CompleteHeaderCheck = true;
                if (!ManageHeaders(response)) {
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                }
        }
@@ -138,7 +150,11 @@ bool HttpServerConnection::ProcessMessage()
                        response.WriteBody(msg.CStr(), msg.GetLength());
                        response.Finish();
 
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                } catch (const std::exception& ex) {
                        response.SetStatus(500, "Internal Server Error");
@@ -146,7 +162,11 @@ bool HttpServerConnection::ProcessMessage()
                        response.WriteBody(msg.CStr(), msg.GetLength());
                        response.Finish();
 
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                }
                return res;