diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2012-08-17 18:11:52 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-25 10:34:39 +0200 |
commit | 98437f0e2edde7f5e49e1a6bea27ef130b58bee4 (patch) | |
tree | a84c71ef0e431c00f0e129fc827d6c48d3f92b86 /src/dbus/qdbus_symbols.cpp | |
parent | 292350f70d56e02005dc3fbad9e50147bd13c5cc (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>
Diffstat (limited to 'src/dbus/qdbus_symbols.cpp')
-rw-r--r-- | src/dbus/qdbus_symbols.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
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 |