From 6e77ce0d8cd265c2a5bb438a9487a479f2991753 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Mon, 15 Oct 2012 15:35:17 +0300 Subject: [PATCH] technology: Refactor and split functions setting enabled state --- src/technology.c | 54 +++++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/technology.c b/src/technology.c index 8c736ea..345dcab 100644 --- a/src/technology.c +++ b/src/technology.c @@ -1200,41 +1200,37 @@ static void powered_changed(struct connman_technology *technology) connman_bool_t powered; __sync_synchronize(); - if (technology->enabled >0) + if (technology->enabled > 0) powered = TRUE; else powered = FALSE; + if (technology->pending_reply != NULL) { + g_dbus_send_reply(connection, + technology->pending_reply, DBUS_TYPE_INVALID); + dbus_message_unref(technology->pending_reply); + technology->pending_reply = NULL; + + g_source_remove(technology->pending_timeout); + technology->pending_timeout = 0; + } + connman_dbus_property_changed_basic(technology->path, CONNMAN_TECHNOLOGY_INTERFACE, "Powered", DBUS_TYPE_BOOLEAN, &powered); } -int __connman_technology_enabled(enum connman_service_type type) +static int technology_enabled(struct connman_technology *technology) { - struct connman_technology *technology; - - technology = technology_find(type); - if (technology == NULL) - return -ENXIO; - if (__sync_fetch_and_add(&technology->enabled, 1) != 0) return -EALREADY; powered_changed(technology); - if (technology->pending_reply != NULL) { - g_dbus_send_reply(connection, technology->pending_reply, DBUS_TYPE_INVALID); - dbus_message_unref(technology->pending_reply); - g_source_remove(technology->pending_timeout); - technology->pending_reply = NULL; - technology->pending_timeout = 0; - } - return 0; } -int __connman_technology_disabled(enum connman_service_type type) +int __connman_technology_enabled(enum connman_service_type type) { struct connman_technology *technology; @@ -1242,22 +1238,30 @@ int __connman_technology_disabled(enum connman_service_type type) if (technology == NULL) return -ENXIO; + return technology_enabled(technology); +} + +static int technology_disabled(struct connman_technology *technology) +{ if (__sync_fetch_and_sub(&technology->enabled, 1) != 1) return -EINPROGRESS; - if (technology->pending_reply != NULL) { - g_dbus_send_reply(connection, technology->pending_reply, DBUS_TYPE_INVALID); - dbus_message_unref(technology->pending_reply); - g_source_remove(technology->pending_timeout); - technology->pending_reply = NULL; - technology->pending_timeout = 0; - } - powered_changed(technology); return 0; } +int __connman_technology_disabled(enum connman_service_type type) +{ + struct connman_technology *technology; + + technology = technology_find(type); + if (technology == NULL) + return -ENXIO; + + return technology_disabled(technology); +} + int __connman_technology_set_offlinemode(connman_bool_t offlinemode) { GSList *list; -- 2.7.4