From 282188d62b9f81f1a46fd6b3341f1992f02b29a5 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 18 Jan 2012 16:46:36 +0200 Subject: [PATCH] connection: Only take service ref when saving service The fix b68795352dd5a9ac41eab31c765ade0c88329a6e was only partly working. We must only take the ref when we are saving stuff to hash (no need to take ref if we are only modifying value in the hash). This patch reverts the commit b68795 --- src/connection.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/connection.c b/src/connection.c index 58adfeb..2b18ef5 100644 --- a/src/connection.c +++ b/src/connection.c @@ -227,9 +227,13 @@ static struct gateway_data *add_gateway(struct connman_service *service, data->ipv4_gateway = old->ipv4_gateway; old->ipv4_gateway = NULL; } + } else { + /* + * Only take a ref if we are adding new stuff to hash. + */ + connman_service_ref(service); } - connman_service_ref(service); g_hash_table_replace(gateway_hash, service, data); return data; @@ -713,14 +717,6 @@ void __connman_connection_gateway_remove(struct connman_service *service, err = disable_gateway(data, type); /* - * We may refcount service twice seperately for ipv4 and ipv6 - * then we need to unref accordingly. - */ - if (do_ipv4 == do_ipv6 && data->ipv4_gateway != NULL && - data->ipv6_gateway != NULL) - connman_service_unref(service); - - /* * We remove the service from the hash only if all the gateway * settings are to be removed. */ -- 2.7.4