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