From e784303c4ca8ee86e57521a00ef5f9d0e98617f8 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 15 May 2014 21:08:18 +0200 Subject: [PATCH] wireless: fix cancelling setup Signed-off-by: Felix Fietkau --- wireless.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/wireless.c b/wireless.c index f3c9549..0e293a0 100644 --- a/wireless.c +++ b/wireless.c @@ -317,17 +317,6 @@ wireless_device_mark_down(struct wireless_device *wdev) } static void -wireless_device_mark_up(struct wireless_device *wdev) -{ - struct wireless_interface *vif; - - D(WIRELESS, "Wireless device '%s' is now up\n", wdev->name); - wdev->state = IFS_UP; - vlist_for_each_element(&wdev->interfaces, vif, node) - wireless_interface_handle_link(vif, true); -} - -static void wireless_device_setup_timeout(struct uloop_timeout *timeout) { struct wireless_device *wdev = container_of(timeout, struct wireless_device, timeout); @@ -361,6 +350,23 @@ __wireless_device_set_down(struct wireless_device *wdev) } static void +wireless_device_mark_up(struct wireless_device *wdev) +{ + struct wireless_interface *vif; + + if (wdev->cancel) { + wdev->cancel = false; + __wireless_device_set_down(wdev); + return; + } + + D(WIRELESS, "Wireless device '%s' is now up\n", wdev->name); + wdev->state = IFS_UP; + vlist_for_each_element(&wdev->interfaces, vif, node) + wireless_interface_handle_link(vif, true); +} + +static void wireless_device_retry_setup(struct wireless_device *wdev) { if (wdev->state == IFS_TEARDOWN || wdev->state == IFS_DOWN || wdev->cancel) @@ -897,9 +903,6 @@ wireless_device_notify(struct wireless_device *wdev, struct blob_attr *data, if (wdev->state != IFS_SETUP) return UBUS_STATUS_PERMISSION_DENIED; - if (wdev->cancel) - return 0; - wireless_device_mark_up(wdev); break; case NOTIFY_CMD_SET_DATA: -- 2.11.0