while associating then the user disconnect the network this will
cause the following:
1- __connman_service_disconnect() which will call
2-      __connman_network_disconnect() which call
3               err = network->driver->disconnect(network);
4-              connman_network_set_connected(network, FALSE);

looking at connman_network_set_connected code
        if ((network->connecting == TRUE || network->associating == TRUE) &&
                                                        connected == FALSE) {
                connman_element_set_error(&network->element,
                                        CONNMAN_ELEMENT_ERROR_CONNECT_FAILED);
                __connman_network_disconnect(network);
        }

network->associating is TRUE and this will case to go to step 2 which
case the deadlock since this will keep looping and preventing to service
any supplicant dbus message to come in and break the deadlock.
---
 plugins/wifi.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/plugins/wifi.c b/plugins/wifi.c
index a159a9d..69548fd 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -617,6 +617,8 @@ static int network_disconnect(struct connman_network 
*network)
        if (wifi == NULL || wifi->interface == NULL)
                return -ENODEV;
 
+       connman_network_set_associating(network, FALSE);
+
        return g_supplicant_interface_disconnect(wifi->interface,
                                                disconnect_callback, wifi);
 }
-- 
1.7.2.3

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

Reply via email to