]> granicus.if.org Git - icinga2/commitdiff
Fix crash in ApiClient::Disconnect
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 9 Jul 2014 07:14:17 +0000 (09:14 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 9 Jul 2014 07:14:17 +0000 (09:14 +0200)
fixes #6672

lib/remote/apiclient.cpp

index e7a2c5cb059c8813a661439d1aca3d40dcf1f582..3c6cea81e221d7921edc06e2f52a754219291fdb 100644 (file)
@@ -72,7 +72,7 @@ void ApiClient::SendMessage(const Dictionary::Ptr& message)
                return;
        }
 
-       m_WriteQueue.Enqueue(boost::bind(&ApiClient::SendMessageSync, this, message));
+       m_WriteQueue.Enqueue(boost::bind(&ApiClient::SendMessageSync, static_cast<ApiClient::Ptr>(GetSelf()), message));
 }
 
 void ApiClient::SendMessageSync(const Dictionary::Ptr& message)
@@ -96,7 +96,6 @@ void ApiClient::SendMessageSync(const Dictionary::Ptr& message)
 void ApiClient::Disconnect(void)
 {
        Log(LogWarning, "ApiClient", "API client disconnected for identity '" + m_Identity + "'");
-       m_Stream->Close();
 
        if (m_Endpoint)
                m_Endpoint->RemoveClient(GetSelf());
@@ -104,6 +103,8 @@ void ApiClient::Disconnect(void)
                ApiListener::Ptr listener = ApiListener::GetInstance();
                listener->RemoveAnonymousClient(GetSelf());
        }
+
+       m_Stream->Close();
 }
 
 bool ApiClient::ProcessMessage(void)