summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-17 12:08:34 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-17 12:08:34 +0200
commita65f4cc4c089af1929e98627c004506246084004 (patch)
tree77513664b7376649d8326f1ad56430b44b9cdc88
parent35c308f1ffb5424deb7e90508f95971ea69f39ca (diff)
downloadconnman-a65f4cc4c089af1929e98627c004506246084004.tar.gz
connman-a65f4cc4c089af1929e98627c004506246084004.tar.bz2
connman-a65f4cc4c089af1929e98627c004506246084004.zip
Fix the reference counting for revived services
-rw-r--r--src/service.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/service.c b/src/service.c
index d3891074..4d1ebaad 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1589,9 +1589,13 @@ struct connman_service *__connman_service_create_from_network(struct connman_net
service = __connman_service_lookup_from_network(network);
if (service != NULL) {
- if (service->timeout > 0 && service->pending == NULL) {
- g_source_remove(service->timeout);
- service->timeout = 0;
+ if (g_atomic_int_get(&service->refcount) == 0) {
+ if (service->timeout > 0) {
+ g_source_remove(service->timeout);
+ service->timeout = 0;
+ }
+
+ connman_service_ref(service);
set_idle(service);
}