summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/connman.h2
-rw-r--r--src/provider.c7
-rw-r--r--src/service.c50
3 files changed, 23 insertions, 36 deletions
diff --git a/src/connman.h b/src/connman.h
index a4a51855..f46ecbb9 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -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);
diff --git a/src/provider.c b/src/provider.c
index 92158e2c..0d9139c3 100644
--- a/src/provider.c
+++ b/src/provider.c
@@ -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:
diff --git a/src/service.c b/src/service.c
index 47890654..d6c6be09 100644
--- a/src/service.c
+++ b/src/service.c
@@ -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);
}
/**