technology->pending_timeout = g_timeout_add_seconds(10,
technology_pending_reply, technology);
} else {
- reply = __connman_error_failed(msg, -err);
+ if (err == -EALREADY)
+ reply = __connman_error_already_enabled(msg);
+ else
+ reply = __connman_error_failed(msg, -err);
if (reply != NULL)
g_dbus_send_message(connection, reply);
}
technology->pending_timeout = g_timeout_add_seconds(10,
technology_pending_reply, technology);
} else {
- reply = __connman_error_failed(msg, -err);
+ if (err == -EALREADY)
+ reply = __connman_error_already_disabled(msg);
+ else
+ reply = __connman_error_failed(msg, -err);
if (reply != NULL)
g_dbus_send_message(connection, reply);
}
if (technology == NULL)
return -ENXIO;
- if (__sync_fetch_and_add(&technology->enabled, 1) == 0)
- powered_changed(technology);
+ 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);
if (technology == NULL)
return -ENXIO;
+ 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);
technology->pending_timeout = 0;
}
- if (__sync_fetch_and_sub(&technology->enabled, 1) == 1)
- powered_changed(technology);
+ powered_changed(technology);
return 0;
}