]> granicus.if.org Git - icinga2/commitdiff
livestatus: stop reading data if stream was closed
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 4 Jul 2013 07:45:44 +0000 (09:45 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 4 Jul 2013 07:45:44 +0000 (09:45 +0200)
fixes #4371

components/livestatus/component.cpp
components/livestatus/query.cpp
components/livestatus/query.h

index 7ef3138516e74ad5828bcf5dcb8eff48dab1855d..bc10ca534b1549fa2e456dc16b9e26e4b08c9911 100644 (file)
@@ -96,6 +96,7 @@ void LivestatusComponent::ClientThreadProc(const Socket::Ptr& client)
                }
 
                Query::Ptr query = boost::make_shared<Query>(lines);
-               query->Execute(stream);
+               if (!query->Execute(stream))
+                       break;
        }
 }
index f43a5f1f876bc9db335183113e623c4dd64cf811..9e17b70acc8fb82c88ea2970b06685cf1b7138fe 100644 (file)
@@ -302,7 +302,7 @@ void Query::PrintFixed16(const Stream::Ptr& stream, int code, const String& data
        stream->Write(header.CStr(), header.GetLength());
 }
 
-void Query::Execute(const Stream::Ptr& stream)
+bool Query::Execute(const Stream::Ptr& stream)
 {
        try {
        Log(LogInformation, "livestatus", "Executing livestatus query: " + m_Verb);
@@ -319,6 +319,10 @@ void Query::Execute(const Stream::Ptr& stream)
                SendResponse(stream, 452, boost::diagnostic_information(ex));
        }
 
-       if (!m_KeepAlive)
+       if (!m_KeepAlive) {
                stream->Close();
+               return false;
+       }
+
+       return true;
 }
index 8f9a81f505ef75d01c9a3205e9443a913c0cc9c1..2d8362d9be23d0288fb1d0f1aa933be24527e53e 100644 (file)
@@ -42,7 +42,7 @@ public:
 
        Query(const std::vector<String>& lines);
 
-       void Execute(const Stream::Ptr& stream);
+       bool Execute(const Stream::Ptr& stream);
 
 private:
        String m_Verb;