From 98437f0e2edde7f5e49e1a6bea27ef130b58bee4 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 17 Aug 2012 18:11:52 +0200 Subject: 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 --- src/dbus/qdbus_symbols.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/dbus/qdbus_symbols.cpp') 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 -- cgit v1.2.3