Fix stalled configuration issue with supplicant
authorMartin Xu <martin.xu@intel.com>
Wed, 15 Jul 2009 23:22:36 +0000 (07:22 +0800)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 16 Jul 2009 01:07:37 +0000 (03:07 +0200)
plugins/supplicant.c
src/device.c

index b964ae7..66a7580 100644 (file)
@@ -1617,6 +1617,20 @@ static void state_change(struct supplicant_task *task, DBusMessage *msg)
                connman_network_set_associating(task->network, TRUE);
                break;
 
+       case WPA_INACTIVE:
+               if (task->disconnecting == TRUE) {
+                       connman_network_set_connected(task->network, FALSE);
+                       connman_network_unref(task->network);
+                       task->disconnecting = FALSE;
+
+                       if (task->pending_network != NULL) {
+                               task->network = task->pending_network;
+                               task->pending_network = NULL;
+                               task_connect(task);
+                       }
+               }
+               break;
+
        default:
                connman_network_set_associating(task->network, FALSE);
                break;
index b3038ad..3ee1f61 100644 (file)
@@ -1432,7 +1432,8 @@ int __connman_device_disconnect(struct connman_device *device)
        while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
                struct connman_network *network = value;
 
-               if (connman_network_get_connected(network) == TRUE)
+               if (connman_network_get_connected(network) == TRUE ||
+                               connman_network_get_associating(network) == TRUE)
                        __connman_network_disconnect(network);
        }