Fix deadlock in ApiListener::RelayMessage
authorGunnar Beutner <gunnar@beutner.name>
Wed, 2 Sep 2015 05:39:40 +0000 (07:39 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 15 Oct 2015 13:18:02 +0000 (15:18 +0200)
fixes #10002

lib/remote/apiclient.cpp
lib/remote/apilistener.cpp

index d4fc9f92a99ff13d70ecf374a4364478b1be6104..b0c61e325fc98148556d178cee96b22b6f46d9c2 100644 (file)
@@ -90,7 +90,7 @@ ConnectionRole ApiClient::GetRole(void) const
 
 void ApiClient::SendMessage(const Dictionary::Ptr& message)
 {
-       m_WriteQueue.Enqueue(boost::bind(&ApiClient::SendMessageSync, ApiClient::Ptr(this), message));
+       m_WriteQueue.Enqueue(boost::bind(&ApiClient::SendMessageSync, ApiClient::Ptr(this), message), true);
 }
 
 void ApiClient::SendMessageSync(const Dictionary::Ptr& message)
index 524438a1bcba28a93d43aa3621145e500691b543..b53168d4355502c60a690ad37b6d19402dfdc5a7 100644 (file)
@@ -456,7 +456,7 @@ void ApiListener::ApiTimerHandler(void)
 
 void ApiListener::RelayMessage(const MessageOrigin& origin, const DynamicObject::Ptr& secobj, const Dictionary::Ptr& message, bool log)
 {
-       m_RelayQueue.Enqueue(boost::bind(&ApiListener::SyncRelayMessage, this, origin, secobj, message, log));
+       m_RelayQueue.Enqueue(boost::bind(&ApiListener::SyncRelayMessage, this, origin, secobj, message, log), true);
 }
 
 void ApiListener::PersistMessage(const Dictionary::Ptr& message, const DynamicObject::Ptr& secobj)