service: Refactor the service unref function
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Wed, 18 Jan 2012 14:46:34 +0000 (16:46 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 20 Jan 2012 00:42:07 +0000 (01:42 +0100)
src/connman.h
src/provider.c
src/service.c

index a4a5185..f46ecbb 100644 (file)
@@ -496,8 +496,6 @@ void __connman_service_cleanup(void);
 void __connman_service_list(DBusMessageIter *iter, void *user_data);
 void __connman_service_list_struct(DBusMessageIter *iter);
 
-void __connman_service_put(struct connman_service *service);
-
 struct connman_service *__connman_service_lookup_from_network(struct connman_network *network);
 struct connman_service *__connman_service_lookup_from_index(int index);
 struct connman_service *__connman_service_create_from_network(struct connman_network *network);
index 92158e2..0d9139c 100644 (file)
@@ -456,12 +456,11 @@ int connman_provider_indicate_error(struct connman_provider *provider,
 static void unregister_provider(gpointer data)
 {
        struct connman_provider *provider = data;
-       struct connman_service *service = provider->vpn_service;
 
-       DBG("provider %p", provider);
+       DBG("provider %p service %p", provider, provider->vpn_service);
 
+       connman_service_unref(provider->vpn_service);
        provider->vpn_service = NULL;
-       __connman_service_put(service);
 
        connman_provider_unref(provider);
 }
@@ -661,7 +660,7 @@ int __connman_provider_create_and_connect(DBusMessage *msg)
        return 0;
 
 failed:
-       __connman_service_put(provider->vpn_service);
+       connman_service_unref(provider->vpn_service);
        provider->vpn_service = NULL;
 
 unref:
index 4789065..d6c6be0 100644 (file)
@@ -3436,33 +3436,6 @@ static void service_free(gpointer user_data)
        g_free(service);
 }
 
-/**
- * __connman_service_put:
- * @service: service structure
- *
- * Release service if no longer needed
- */
-void __connman_service_put(struct connman_service *service)
-{
-       GSequenceIter *iter;
-
-       DBG("service %p ref %d", service, service->refcount - 1);
-
-       if (__sync_fetch_and_sub(&service->refcount, 1) != 1)
-               return;
-
-       iter = g_hash_table_lookup(service_hash, service->identifier);
-       if (iter != NULL) {
-               reply_pending(service, ECONNABORTED);
-
-               __connman_service_disconnect(service);
-
-               g_sequence_remove(iter);
-       } else {
-               service_free(service);
-       }
-}
-
 static void stats_init(struct connman_service *service)
 {
        /* home */
@@ -3571,11 +3544,28 @@ struct connman_service *connman_service_ref(struct connman_service *service)
  * connman_service_unref:
  * @service: service structure
  *
- * Decrease reference counter of service
+ * Decrease reference counter of service and release service if no
+ * longer needed.
  */
 void connman_service_unref(struct connman_service *service)
 {
-       __connman_service_put(service);
+       GSequenceIter *iter;
+
+       DBG("service %p ref %d", service, service->refcount - 1);
+
+       if (__sync_fetch_and_sub(&service->refcount, 1) != 1)
+               return;
+
+       iter = g_hash_table_lookup(service_hash, service->identifier);
+       if (iter != NULL) {
+               reply_pending(service, ECONNABORTED);
+
+               __connman_service_disconnect(service);
+
+               g_sequence_remove(iter);
+       } else {
+               service_free(service);
+       }
 }
 
 static gint service_compare(gconstpointer a, gconstpointer b,
@@ -5350,7 +5340,7 @@ void __connman_service_remove_from_network(struct connman_network *network)
        __connman_connection_gateway_remove(service,
                                        CONNMAN_IPCONFIG_TYPE_ALL);
 
-       __connman_service_put(service);
+       connman_service_unref(service);
 }
 
 /**