technology: Refactor and split functions setting enabled state
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Mon, 15 Oct 2012 12:35:17 +0000 (15:35 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Tue, 16 Oct 2012 12:03:34 +0000 (15:03 +0300)
src/technology.c

index 8c736ea..345dcab 100644 (file)
@@ -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;