summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-08-17 18:11:52 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-25 10:34:39 +0200
commit98437f0e2edde7f5e49e1a6bea27ef130b58bee4 (patch)
treea84c71ef0e431c00f0e129fc827d6c48d3f92b86
parent292350f70d56e02005dc3fbad9e50147bd13c5cc (diff)
Add a way for QtDBus to force a call to dbus_shutdown
This will ask the D-Bus library to free its caches. It's useful for running valgrind on a D-Bus based application, so we can detect real leaks. We can't run this by default because there could be other users of libdbus-1. Calling the shutdown function would make them stop working. Change-Id: I9854b82afcdbc4955d6f0a1a1b49a673186242c8 Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
-rw-r--r--src/dbus/dbus.pro2
-rw-r--r--src/dbus/qdbus_symbols.cpp18
2 files changed, 17 insertions, 3 deletions
diff --git a/src/dbus/dbus.pro b/src/dbus/dbus.pro
index d7b745d81e..3dd60c8447 100644
--- a/src/dbus/dbus.pro
+++ b/src/dbus/dbus.pro
@@ -12,7 +12,7 @@ MODULE_CONFIG = dbusadaptors dbusinterfaces
DEFINES += DBUS_API_SUBJECT_TO_CHANGE
QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS
-contains(QT_CONFIG, dbus-linked) {
+contains(QT_CONFIG, dbus-linked) {
LIBS_PRIVATE += $$QT_LIBS_DBUS
DEFINES += QT_LINKED_LIBDBUS
}
diff --git a/src/dbus/qdbus_symbols.cpp b/src/dbus/qdbus_symbols.cpp
index cb2225e0db..4e8249f6d7 100644
--- a/src/dbus/qdbus_symbols.cpp
+++ b/src/dbus/qdbus_symbols.cpp
@@ -48,6 +48,8 @@
#ifndef QT_NO_DBUS
+extern "C" void dbus_shutdown();
+
QT_BEGIN_NAMESPACE
void (*qdbus_resolve_me(const char *name))();
@@ -59,6 +61,11 @@ static QLibrary *qdbus_libdbus = 0;
void qdbus_unloadLibDBus()
{
+ if (qdbus_libdbus) {
+ if (qEnvironmentVariableIsSet("QDBUS_FORCE_SHUTDOWN"))
+ qdbus_libdbus->resolve("dbus_shutdown")();
+ qdbus_libdbus->unload();
+ }
delete qdbus_libdbus;
qdbus_libdbus = 0;
}
@@ -129,12 +136,19 @@ void (*qdbus_resolve_me(const char *name))()
#endif
}
+#else // QT_LINKED_LIBDBUS
+static void qdbus_unloadLibDBus()
+{
+ if (qEnvironmentVariableIsSet("QDBUS_FORCE_SHUTDOWN"))
+ dbus_shutdown();
+}
+
+#endif // !QT_LINKED_LIBDBUS
+
#ifndef QT_BOOTSTRAPPED
Q_DESTRUCTOR_FUNCTION(qdbus_unloadLibDBus)
#endif
-#endif // QT_LINKED_LIBDBUS
-
QT_END_NAMESPACE
#endif // QT_NO_DBUS