return -ENOLINK;
err = device->driver->enable(device);
- if (err < 0) {
+ if (err < 0 && err != -EALREADY) {
if (err == -EINPROGRESS) {
device->powered_pending = TRUE;
device->offlinemode = FALSE;
g_hash_table_remove_all(device->networks);
err = device->driver->disable(device);
- if (err < 0) {
+ if (err < 0 && err != -EALREADY) {
if (err == -EINPROGRESS)
device->powered_pending = FALSE;
return err;
int connman_device_set_powered(struct connman_device *device,
connman_bool_t powered)
{
+ int err;
+
DBG("driver %p powered %d", device, powered);
if (device->powered == powered) {
}
if (powered == TRUE)
- __connman_device_enable(device);
+ err = __connman_device_enable(device);
else
- __connman_device_disable(device);
+ err = __connman_device_disable(device);
+
+ if (err < 0 && err != -EINPROGRESS)
+ return err;
device->powered = powered;
device->powered_pending = powered;