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