diff options
author | Philip Rauwolf <rauwolf@itestra.de> | 2013-03-01 12:49:35 +0100 |
---|---|---|
committer | Philip Rauwolf <rauwolf@itestra.de> | 2013-03-01 12:50:07 +0100 |
commit | 29104467eb05f92c5688477d1d7fdb18da2b04ec (patch) | |
tree | d2f22e564097d303f0d3abf0cdec61c7661d95dc /src/CommonAPI/DBus/DBusConnection.cpp | |
parent | e53fc484061f14cf3ecf4679bdec7314cafbf590 (diff) | |
download | genivi-common-api-dbus-runtime-29104467eb05f92c5688477d1d7fdb18da2b04ec.tar.gz |
Fixed occasional deadlock that occurred when dbus connection got
destroyed
Diffstat (limited to 'src/CommonAPI/DBus/DBusConnection.cpp')
-rw-r--r-- | src/CommonAPI/DBus/DBusConnection.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/CommonAPI/DBus/DBusConnection.cpp b/src/CommonAPI/DBus/DBusConnection.cpp index e0a32e0..68af24c 100644 --- a/src/CommonAPI/DBus/DBusConnection.cpp +++ b/src/CommonAPI/DBus/DBusConnection.cpp @@ -92,15 +92,16 @@ bool DBusConnection::connect(DBusError& dbusError) { void DBusConnection::disconnect() { if (isConnected()) { - stopDispatching_ = true; - if (!dbusSignalMatchRulesMap_.empty()) { dbus_connection_remove_filter(libdbusConnection_, &onLibdbusSignalFilterThunk, this); } + dbus_connection_close(libdbusConnection_); + + stopDispatching_ = true; + dispatchThread_.join(); - dbus_connection_close(libdbusConnection_); dbus_connection_unref(libdbusConnection_); libdbusConnection_ = NULL; @@ -119,8 +120,8 @@ DBusProxyConnection::ConnectionStatusEvent& DBusConnection::getConnectionStatusE const std::shared_ptr<DBusServiceRegistry> DBusConnection::getDBusServiceRegistry() { std::shared_ptr<DBusServiceRegistry> serviceRegistry = dbusServiceRegistry_.lock(); if (!serviceRegistry) { - auto blub = this->shared_from_this(); - serviceRegistry = std::make_shared<DBusServiceRegistry>(blub); + serviceRegistry = std::make_shared<DBusServiceRegistry>(this->shared_from_this()); + serviceRegistry->init(); dbusServiceRegistry_ = serviceRegistry; } |