Glist returned from g_hash_table_get_values was not
being freed during p2p connect, causing a leak.
---
 src/peer.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/peer.c b/src/peer.c
index 7f23059..1d802e1 100644
--- a/src/peer.c
+++ b/src/peer.c
@@ -480,7 +480,7 @@ static DBusMessage *connect_peer(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
 {
        struct connman_peer *peer = user_data;
-       GList *list;
+       GList *list, *start;
        int err;
 
        DBG("peer %p", peer);
@@ -489,6 +489,7 @@ static DBusMessage *connect_peer(DBusConnection *conn,
                return __connman_error_in_progress(msg);
 
        list = g_hash_table_get_values(peers_table);
+       start = list;
        for (; list; list = list->next) {
                struct connman_peer *temp = list->data;
 
@@ -496,11 +497,15 @@ static DBusMessage *connect_peer(DBusConnection *conn,
                        continue;
 
                if (is_connecting(temp) || is_connected(temp)) {
-                       if (peer_disconnect(temp) == -EINPROGRESS)
+                       if (peer_disconnect(temp) == -EINPROGRESS) {
+                               g_list_free(start);
                                return __connman_error_in_progress(msg);
+                       }
                }
        }
 
+       g_list_free(start);
+
        peer->pending = dbus_message_ref(msg);
 
        err = peer_connect(peer);
-- 
1.9.1

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to