summaryrefslogtreecommitdiffstats
path: root/src/dbus/qdbusserver.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2016-05-31 17:33:03 -0300
committerJani Heikkinen <jani.heikkinen@qt.io>2017-05-11 08:35:33 +0000
commit67f466505e1aed6b7f87e766141d081146b4159c (patch)
treee68c90604714778b3805cdbe831fdd05f6f5ac45 /src/dbus/qdbusserver.cpp
parentdaeb334039e9dcc01485995f53552749131a06b7 (diff)
Fix some QtDBus crashes during application destruction
It's possible that some code executes after QDBusConnectionManager is destroyed and still tries to access QtDBus. Protect against such crashes. Change-Id: I87e17314d8b24ae983b1fffd1453c13fbd3cf48e Reviewed-by: René J.V. Bertin <rjvbertin@gmail.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'src/dbus/qdbusserver.cpp')
-rw-r--r--src/dbus/qdbusserver.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp
index 027ce935d6..b1f9be2c2a 100644
--- a/src/dbus/qdbusserver.cpp
+++ b/src/dbus/qdbusserver.cpp
@@ -68,7 +68,11 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent)
if (!qdbus_loadLibDBus())
return;
- emit QDBusConnectionManager::instance()->serverRequested(address, this);
+ QDBusConnectionManager *instance = QDBusConnectionManager::instance();
+ if (!instance)
+ return;
+
+ emit instance->serverRequested(address, this);
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection);
}
@@ -93,7 +97,11 @@ QDBusServer::QDBusServer(QObject *parent)
return;
}
- emit QDBusConnectionManager::instance()->serverRequested(address, this);
+ QDBusConnectionManager *instance = QDBusConnectionManager::instance();
+ if (!instance)
+ return;
+
+ emit instance->serverRequested(address, this);
QObject::connect(d, SIGNAL(newServerConnection(QDBusConnectionPrivate*)),
this, SLOT(_q_newConnection(QDBusConnectionPrivate*)), Qt::QueuedConnection);
}