Fix memory leaks in sendWithReplyAsync

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
(cherry picked from commit 9d505d2683)
v3.5.13-sru
Slávek Banko 8 years ago
parent 7a5b9e343f
commit 370dedffbb

@ -291,6 +291,16 @@ TQT_DBusConnectionPrivate::TQT_DBusConnectionPrivate(TQObject *parent)
TQT_DBusConnectionPrivate::~TQT_DBusConnectionPrivate() 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)) if (dbus_error_is_set(&error))
dbus_error_free(&error); dbus_error_free(&error);
@ -629,20 +639,22 @@ int TQT_DBusConnectionPrivate::sendWithReplyAsync(const TQT_DBusMessage &message
if (!msg) if (!msg)
return 0; return 0;
int msg_serial = 0;
DBusPendingCall *pending = 0; DBusPendingCall *pending = 0;
if (dbus_connection_send_with_reply(connection, msg, &pending, message.timeout())) { if (dbus_connection_send_with_reply(connection, msg, &pending, message.timeout())) {
TQT_DBusPendingCall *pcall = new TQT_DBusPendingCall; TQT_DBusPendingCall *pcall = new TQT_DBusPendingCall;
pcall->receiver = receiver; pcall->receiver = receiver;
pcall->method = method; pcall->method = method;
pcall->pending = dbus_pending_call_ref(pending); pcall->pending = pending;
pendingCalls.insert(pcall->pending, pcall); pendingCalls.insert(pcall->pending, pcall);
dbus_pending_call_set_notify(pending, qDBusResultReceived, this, 0); 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() void TQT_DBusConnectionPrivate::flush()

Loading…
Cancel
Save