projects
/
framework
/
connectivity
/
connman.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2c349f0
)
wifi: Fix network owner ship
author
Daniel Wagner
<daniel.wagner@bmw-carit.de>
Mon, 25 Jul 2011 14:24:38 +0000
(16:24 +0200)
committer
Marcel Holtmann
<marcel@holtmann.org>
Mon, 25 Jul 2011 23:23:21 +0000
(
01:23
+0200)
plugins/wifi.c
patch
|
blob
|
history
diff --git
a/plugins/wifi.c
b/plugins/wifi.c
index
edea4e7
..
c5c0273
100644
(file)
--- a/
plugins/wifi.c
+++ b/
plugins/wifi.c
@@
-61,6
+61,7
@@
struct wifi_data {
struct connman_device *device;
struct connman_network *network;
struct connman_network *pending_network;
struct connman_device *device;
struct connman_network *network;
struct connman_network *pending_network;
+ GSList *networks;
GSupplicantInterface *interface;
GSupplicantState state;
connman_bool_t connected;
GSupplicantInterface *interface;
GSupplicantState state;
connman_bool_t connected;
@@
-154,6
+155,22
@@
static int wifi_probe(struct connman_device *device)
return 0;
}
return 0;
}
+static void remove_networks(struct connman_device *device,
+ struct wifi_data *wifi)
+{
+ GSList *list;
+
+ for (list = wifi->networks; list != NULL; list = list->next) {
+ struct connman_network *network = list->data;
+
+ connman_device_remove_network(device, network);
+ connman_network_unref(network);
+ }
+
+ g_slist_free(wifi->networks);
+ wifi->networks = NULL;
+}
+
static void wifi_remove(struct connman_device *device)
{
struct wifi_data *wifi = connman_device_get_data(device);
static void wifi_remove(struct connman_device *device)
{
struct wifi_data *wifi = connman_device_get_data(device);
@@
-165,10
+182,7
@@
static void wifi_remove(struct connman_device *device)
iface_list = g_list_remove(iface_list, wifi);
iface_list = g_list_remove(iface_list, wifi);
- if (wifi->pending_network != NULL) {
- connman_network_unref(wifi->pending_network);
- wifi->pending_network = NULL;
- }
+ remove_networks(device, wifi);
connman_device_set_data(device, NULL);
connman_device_unref(wifi->device);
connman_device_set_data(device, NULL);
connman_device_unref(wifi->device);
@@
-239,10
+253,10
@@
static int wifi_disable(struct connman_device *device)
wifi->connected = FALSE;
wifi->disconnecting = FALSE;
wifi->connected = FALSE;
wifi->disconnecting = FALSE;
- if (wifi->pending_network != NULL) {
- connman_network_unref(wifi->pending_network);
+ if (wifi->pending_network != NULL)
wifi->pending_network = NULL;
wifi->pending_network = NULL;
- }
+
+ remove_networks(device, wifi);
ret = g_supplicant_interface_remove(wifi->interface,
interface_remove_callback,
ret = g_supplicant_interface_remove(wifi->interface,
interface_remove_callback,
@@
-429,9
+443,9
@@
static int network_connect(struct connman_network *network)
ssid_init(ssid, network);
if (wifi->disconnecting == TRUE)
ssid_init(ssid, network);
if (wifi->disconnecting == TRUE)
- wifi->pending_network =
connman_network_ref(network)
;
+ wifi->pending_network =
network
;
else {
else {
- wifi->network =
connman_network_ref(network)
;
+ wifi->network =
network
;
return g_supplicant_interface_connect(interface, ssid,
connect_callback, network);
return g_supplicant_interface_connect(interface, ssid,
connect_callback, network);
@@
-455,8
+469,6
@@
static void disconnect_callback(int result, GSupplicantInterface *interface,
*/
if (result < 0)
connman_network_set_connected(wifi->network, FALSE);
*/
if (result < 0)
connman_network_set_connected(wifi->network, FALSE);
-
- connman_network_unref(wifi->network);
}
wifi->network = NULL;
}
wifi->network = NULL;
@@
-465,7
+477,6
@@
static void disconnect_callback(int result, GSupplicantInterface *interface,
if (wifi->pending_network != NULL) {
network_connect(wifi->pending_network);
if (wifi->pending_network != NULL) {
network_connect(wifi->pending_network);
- connman_network_unref(wifi->pending_network);
wifi->pending_network = NULL;
}
wifi->pending_network = NULL;
}
@@
-799,6
+810,8
@@
static void network_added(GSupplicantNetwork *supplicant_network)
connman_network_unref(network);
return;
}
connman_network_unref(network);
return;
}
+
+ wifi->networks = g_slist_append(wifi->networks, network);
}
if (name != NULL && name[0] != '\0')
}
if (name != NULL && name[0] != '\0')
@@
-838,6
+851,8
@@
static void network_removed(GSupplicantNetwork *network)
if (connman_network == NULL)
return;
if (connman_network == NULL)
return;
+ wifi->networks = g_slist_remove(wifi->networks, connman_network);
+
connman_device_remove_network(wifi->device, connman_network);
connman_network_unref(connman_network);
}
connman_device_remove_network(wifi->device, connman_network);
connman_network_unref(connman_network);
}