connection: Only take service ref when saving service
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Wed, 18 Jan 2012 14:46:36 +0000 (16:46 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 20 Jan 2012 00:42:07 +0000 (01:42 +0100)
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

index 58adfeb..2b18ef5 100644 (file)
@@ -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.
         */