]> 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>
Fri, 23 Feb 2018 09:09:28 +0000 (10:09 +0100)
lib/remote/httpserverconnection.cpp

index 706ee33a2a2de7b94645b39bd2374669609ee30e..8b0bb5ce685a9b10e664b550d6edb17ef6a53ead 100644 (file)
@@ -107,7 +107,11 @@ bool HttpServerConnection::ProcessMessage(void)
                        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(void)
                        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(void)
        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(void)
                        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(void)
                        response.WriteBody(msg.CStr(), msg.GetLength());
                        response.Finish();
 
+                       m_CurrentRequest.~HttpRequest();
+                       new (&m_CurrentRequest) HttpRequest(m_Stream);
+
                        m_Stream->Shutdown();
+
                        return false;
                }
                return res;