From f468fceb0264791d6acc297136eb26080aca4216 Mon Sep 17 00:00:00 2001 From: Andrew Zaborowski Date: Sat, 2 Jul 2016 16:42:31 +0200 Subject: [PATCH] device: Handle disconnect calls while connecting If Disconnect is called during an ongoing connection attempt send a CMD_DEAUTHENTICATE command same as when we're already connected, and send a reply to potential dbus Connect call. --- src/device.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/device.c b/src/device.c index f2684aa0..8b7e4053 100644 --- a/src/device.c +++ b/src/device.c @@ -555,7 +555,9 @@ static void device_connect_cb(struct netdev *netdev, enum netdev_result result, dbus_pending_reply(&device->connect_pending, dbus_error_failed(device->connect_pending)); - device_disassociated(device); + if (device->state == DEVICE_STATE_CONNECTING) + device_disassociated(device); + return; } @@ -744,10 +746,9 @@ static struct l_dbus_message *device_disconnect(struct l_dbus *dbus, void *user_data) { struct device *device = user_data; - struct network *network; + struct network *network = device->connected_network; - if (device->state == DEVICE_STATE_CONNECTING || - device->state == DEVICE_STATE_DISCONNECTING) + if (device->state == DEVICE_STATE_DISCONNECTING) return dbus_error_busy(message); if (!device->connected_bss) @@ -756,7 +757,10 @@ static struct l_dbus_message *device_disconnect(struct l_dbus *dbus, if (netdev_disconnect(device->netdev, device_disconnect_cb, device) < 0) return dbus_error_failed(message); - network = device->connected_network; + if (device->state == DEVICE_STATE_CONNECTING) + if (device->connect_pending) + dbus_pending_reply(&device->connect_pending, + dbus_error_aborted(device->connect_pending)); /* * If the disconnect somehow fails we won't know if we're still