If the driver does not have a disconnect function or the disconnect
function returns anything else than -EINPROGRESS, consider the
network to be disconnected.
---
 src/network.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/network.c b/src/network.c
index 1d5a13b..ce6fa85 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1539,7 +1539,7 @@ int __connman_network_connect(struct connman_network 
*network)
  */
 int __connman_network_disconnect(struct connman_network *network)
 {
-       int err;
+       int err = 0;
 
        DBG("network %p", network);
 
@@ -1550,13 +1550,12 @@ int __connman_network_disconnect(struct connman_network 
*network)
        if (!network->driver)
                return -EUNATCH;
 
-       if (!network->driver->disconnect)
-               return -ENOSYS;
-
        network->connecting = false;
 
-       err = network->driver->disconnect(network);
-       if (err == 0)
+       if (network->driver->disconnect)
+               err = network->driver->disconnect(network);
+
+       if (err != -EINPROGRESS)
                set_disconnected(network);
 
        return err;
-- 
1.8.5.3

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to