summaryrefslogtreecommitdiffstats
path: root/src/dbus/qdbusmetaobject.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2023-07-10 13:52:49 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2023-08-03 11:28:38 +0200
commit4c1df115ecfb14c353c0ec46efdb1f9d2fc0ea95 (patch)
tree53a28ae34e145758241695ea0d6bd3a7f254b638 /src/dbus/qdbusmetaobject.cpp
parentc41733b06bd61d4710a9f6ec849f0d913c4497bb (diff)
QDbus: Avoid memory leak in registerComplexDBusType
QMetaType does not own the interface from which it is constructed. Consequently, we end up with a memory leak. This is not a huge issue, given that the map of meta-types is static, and the application is about to be close when can discard it anyway, but it causes avoidable sanitizer warnings, which are annoying when debugging more severe memory leaks. Pick-to: 6.6 6.5 Change-Id: Ifee3f4e19835536f4a6cfa4f6866ab621581ad4f Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/dbus/qdbusmetaobject.cpp')
-rw-r--r--src/dbus/qdbusmetaobject.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp
index 543b185df9..f1b586f58d 100644
--- a/src/dbus/qdbusmetaobject.cpp
+++ b/src/dbus/qdbusmetaobject.cpp
@@ -116,8 +116,11 @@ static int registerComplexDBusType(const QByteArray &typeName)
{
~Hash()
{
- for (QMetaType entry : *this)
+ for (QMetaType entry : std::as_const(*this)) {
+ auto iface = static_cast<const QDBusRawTypeHandler *>(entry.iface());
QMetaType::unregisterMetaType(std::move(entry));
+ delete iface;
+ }
}
} hash;
QMutexLocker lock(&mutex);