diff options
author | Slávek Banko <slavek.banko@axis.cz> | 2017-04-01 16:23:06 +0200 |
---|---|---|
committer | Slávek Banko <slavek.banko@axis.cz> | 2017-07-18 19:58:48 +0200 |
commit | 370dedffbb070815f0d55892cba812732d337e3f (patch) | |
tree | f65e0ad86dadf8c528e19800c87f5efb81da6b8f | |
parent | 7a5b9e343f15359fe8ee5422f2aad7be11ad5d19 (diff) | |
download | dbus-1-tqt-370dedffbb070815f0d55892cba812732d337e3f.tar.gz dbus-1-tqt-370dedffbb070815f0d55892cba812732d337e3f.zip |
Fix memory leaks in sendWithReplyAsync
Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
(cherry picked from commit 9d505d268352b7776a80dc91b7e49fc4c73a5e73)
-rw-r--r-- | tqdbusintegrator.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/tqdbusintegrator.cpp b/tqdbusintegrator.cpp index ef3b76f..83af8e7 100644 --- a/tqdbusintegrator.cpp +++ b/tqdbusintegrator.cpp @@ -291,6 +291,16 @@ TQT_DBusConnectionPrivate::TQT_DBusConnectionPrivate(TQObject *parent) TQT_DBusConnectionPrivate::~TQT_DBusConnectionPrivate() { + for (PendingCallMap::iterator it = pendingCalls.begin(); it != pendingCalls.end();) + { + PendingCallMap::iterator copyIt = it; + ++it; + dbus_pending_call_cancel(copyIt.key()); + dbus_pending_call_unref(copyIt.key()); + delete copyIt.data(); + pendingCalls.erase(copyIt); + } + if (dbus_error_is_set(&error)) dbus_error_free(&error); @@ -629,20 +639,22 @@ int TQT_DBusConnectionPrivate::sendWithReplyAsync(const TQT_DBusMessage &message if (!msg) return 0; + int msg_serial = 0; DBusPendingCall *pending = 0; if (dbus_connection_send_with_reply(connection, msg, &pending, message.timeout())) { TQT_DBusPendingCall *pcall = new TQT_DBusPendingCall; pcall->receiver = receiver; pcall->method = method; - pcall->pending = dbus_pending_call_ref(pending); + pcall->pending = pending; pendingCalls.insert(pcall->pending, pcall); dbus_pending_call_set_notify(pending, qDBusResultReceived, this, 0); - return dbus_message_get_serial(msg); + msg_serial = dbus_message_get_serial(msg); } - return 0; + dbus_message_unref(msg); + return msg_serial; } void TQT_DBusConnectionPrivate::flush() |