technology: Enable/disable individual devices also with rfkill
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 28 Jan 2013 15:44:37 +0000 (17:44 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Wed, 30 Jan 2013 08:28:02 +0000 (10:28 +0200)
In order to keep ConnMan devices in sync with Bluz 5 adapters, the
individual devices need to be enabled/disabled also when
unblocking/blocking them with rfkill. Thus enable devices after
unblocking and disable devices before blocking with rfkill.

src/technology.c

index bc02bec93d6c0722a16ff3669d30f5602a6d21a5..799e2533f4edd0ff802883bd30de9aa67ff61ccd 100644 (file)
@@ -598,6 +598,9 @@ static int technology_affect_devices(struct connman_technology *technology,
 
 static int technology_enable(struct connman_technology *technology)
 {
+       int err = 0;
+       int err_dev;
+
        DBG("technology %p enable", technology);
 
        __sync_synchronize();
@@ -608,13 +611,20 @@ static int technology_enable(struct connman_technology *technology)
                return -EBUSY;
 
        if (technology->rfkill_driven == TRUE)
-               return __connman_rfkill_block(technology->type, FALSE);
+               err = __connman_rfkill_block(technology->type, FALSE);
+
+       err_dev = technology_affect_devices(technology, TRUE);
 
-       return technology_affect_devices(technology, TRUE);
+       if (technology->rfkill_driven == FALSE)
+               err = err_dev;
+
+       return err;
 }
 
 static int technology_disable(struct connman_technology *technology)
 {
+       int err;
+
        DBG("technology %p disable", technology);
 
        __sync_synchronize();
@@ -627,10 +637,12 @@ static int technology_disable(struct connman_technology *technology)
        if (technology->tethering == TRUE)
                set_tethering(technology, FALSE);
 
+       err = technology_affect_devices(technology, FALSE);
+
        if (technology->rfkill_driven == TRUE)
-               return __connman_rfkill_block(technology->type, TRUE);
+               err = __connman_rfkill_block(technology->type, TRUE);
 
-       return technology_affect_devices(technology, FALSE);
+       return err;
 }
 
 static DBusMessage *set_powered(struct connman_technology *technology,