Unregister DBusObject callback when the object is destroyed

Without that cleanup, DBusConnection might try to call a dangling
std::function in case the DBusObject was removed before. That is for
example happening during shutdown.
This commit is contained in:
Roland Winklmeier
2018-10-19 14:50:55 +02:00
committed by Klaus Basan
parent dfd33e40c1
commit f8cc92341a
3 changed files with 21 additions and 9 deletions

View File

@@ -15,14 +15,17 @@ namespace XSwiftBus
CDBusObject::CDBusObject()
{ }
CDBusObject::~CDBusObject() = default;
CDBusObject::~CDBusObject()
{
m_dbusConnection->unregisterDisconnectedCallback(this);
};
void CDBusObject::setDBusConnection(const std::shared_ptr<CDBusConnection> &dbusConnection)
{
m_dbusConnection = dbusConnection;
dbusConnectedHandler();
CDBusConnection::DisconnectedCallback disconnectedHandler = std::bind(&CDBusObject::dbusDisconnectedHandler, this);
m_dbusConnection->registerDisconnectedCallback(disconnectedHandler);
m_dbusConnection->registerDisconnectedCallback(this, disconnectedHandler);
}
void CDBusObject::registerDBusObjectPath(const std::string &interfaceName, const std::string &objectPath)