From: Adrian Szyndela Date: Thu, 14 Apr 2016 12:35:57 +0000 (+0200) Subject: fix for memleaks X-Git-Tag: accepted/tizen/common/20160422.172237~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9086ee40fe7ec056022f5b727392edb76160d6e;p=platform%2Fupstream%2Fdbus.git fix for memleaks Freeing non-converted message after conversion Freeing string objects Freeing unique name in kdbus transport at end-of-life Freeing matchmaker in kdbus transport at end-of-life Change-Id: Iae4e231c52b78af3efd5a8a366fc01e50b03feeb --- diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index e6c29fd..5531fbb 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -594,12 +594,13 @@ _dbus_connection_queue_synthesized_message_link (DBusConnection *connection, msg = (DBusMessage *)link->data; rmsg = msg; - _dbus_transport_assure_protocol_version (connection->transport, &rmsg); - - if (rmsg != msg) { - _dbus_list_free_link(link); - link = _dbus_list_alloc_link (rmsg); - } + if (_dbus_transport_assure_protocol_version (connection->transport, &rmsg)) + { + /* If the message is converted, then we don't need the old format anymore */ + _dbus_list_free_link(link); + link = _dbus_list_alloc_link (rmsg); + dbus_message_unref (msg); + } _dbus_list_append_link (&connection->incoming_messages, link); @@ -2085,7 +2086,13 @@ _dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *con dbus_message_lock (message); /* This converts message if neccessary */ - _dbus_transport_assure_protocol_version (connection->transport, &message); + if (!_dbus_transport_assure_protocol_version (connection->transport, &message)) + { + /* Only non-converted messages must be refed. + * Converted messages are local anyway. + */ + dbus_message_ref (message); + } preallocated->queue_link->data = message; _dbus_list_prepend_link (&connection->outgoing_messages, @@ -2099,8 +2106,6 @@ _dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *con dbus_free (preallocated); preallocated = NULL; - dbus_message_ref (message); - connection->n_outgoing += 1; _dbus_verbose ("Message %p (%s %s %s %s '%s') for %s added to outgoing queue %p, %d pending to send\n", diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 60ca85d..54056f3 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -742,12 +742,14 @@ dbus_message_cache_or_finalize (DBusMessage *message) if (NULL != message->signature) { _dbus_string_free (message->signature); + dbus_free (message->signature); message->signature = NULL; } if (NULL != message->unique_sender) { _dbus_string_free (message->unique_sender); + dbus_free (message->unique_sender); message->unique_sender = NULL; } @@ -4486,6 +4488,7 @@ set_unique_sender (DBusMessage *message, uint64_t unique_sender_id) if (!_dbus_string_append_printf (message->unique_sender, ":1.%llu", (unsigned long long)unique_sender_id)) { _dbus_string_free (message->unique_sender); + dbus_free (message->unique_sender); message->unique_sender = NULL; return FALSE; } @@ -5317,8 +5320,9 @@ _dbus_message_assure_dbus1 (DBusMessage **message) if ((*message)->header.protocol_version != DBUS_MAJOR_PROTOCOL_VERSION) { *message = _dbus_message_remarshal (*message, FALSE); + return TRUE; } - return *message != NULL; + return FALSE; } dbus_bool_t @@ -5327,8 +5331,9 @@ _dbus_message_assure_gvariant (DBusMessage **message) if ((*message)->header.protocol_version != DBUS_PROTOCOL_VERSION_GVARIANT) { *message = _dbus_message_remarshal (*message, TRUE); + return TRUE; } - return *message != NULL; + return FALSE; } /** @} */ diff --git a/dbus/dbus-signals.c b/dbus/dbus-signals.c index d6756b4..68fbeb5 100644 --- a/dbus/dbus-signals.c +++ b/dbus/dbus-signals.c @@ -1548,7 +1548,9 @@ free_matchmaker (Matchmaker *matchmaker) if (*items == NULL) _dbus_hash_iter_remove_entry (&iter); } + _dbus_hash_table_unref (p->rules_by_iface); } + dbus_free (matchmaker); } int diff --git a/dbus/dbus-transport-kdbus.c b/dbus/dbus-transport-kdbus.c index f8fad93..8170a0c 100644 --- a/dbus/dbus-transport-kdbus.c +++ b/dbus/dbus-transport-kdbus.c @@ -3389,6 +3389,7 @@ transport_finalize (DBusTransport *transport) free_policies ( kdbus_transport ); _kdbus_free (kdbus_transport->kdbus); + free (kdbus_transport->my_DBus_unique_name); dbus_free (transport); }