From c925f1bff1846b1ed4d12ae02358bc6444ddfe06 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 18 Jan 2012 16:46:35 +0200 Subject: [PATCH] service: Properly ref/unref the network We only took reference to network when the network was created by service. This needs to be changed as the network might disappear while service is using network pointer. So now we take network ref when necessary and release it when service is removed or if underlaying network is changed. --- src/service.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/service.c b/src/service.c index d6c6be0..b8906a6 100644 --- a/src/service.c +++ b/src/service.c @@ -3387,6 +3387,7 @@ static void service_free(gpointer user_data) if (service->network != NULL) { __connman_network_disconnect(service->network); connman_network_unref(service->network); + service->network = NULL; } if (service->provider != NULL) @@ -5160,13 +5161,14 @@ static void update_from_network(struct connman_service *service, service->wps = connman_network_get_bool(network, "WiFi.WPS"); if (service->strength > strength && service->network != NULL) { - service->network = network; + connman_network_unref(service->network); + service->network = connman_network_ref(network); strength_changed(service); } if (service->network == NULL) - service->network = network; + service->network = connman_network_ref(network); iter = g_hash_table_lookup(service_hash, service->identifier); if (iter != NULL) -- 2.7.4