projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wireless: fix handling of wdev->config_state, prevent handling of multiple state...
[project/netifd.git]
/
wireless.c
diff --git
a/wireless.c
b/wireless.c
index
1f7fc5d
..
a4d7c26
100644
(file)
--- a/
wireless.c
+++ b/
wireless.c
@@
-270,9
+270,10
@@
__wireless_device_set_up(struct wireless_device *wdev)
static void
wireless_device_free(struct wireless_device *wdev)
{
static void
wireless_device_free(struct wireless_device *wdev)
{
- vlist_flush_all(&wdev->interfaces);
- free(wdev->config);
- free(wdev);
+ vlist_flush_all(&wdev->interfaces);
+ avl_delete(&wireless_devices.avl, &wdev->node.avl);
+ free(wdev->config);
+ free(wdev);
}
static void
}
static void
@@
-280,10
+281,10
@@
wdev_handle_config_change(struct wireless_device *wdev)
{
enum interface_config_state state = wdev->config_state;
{
enum interface_config_state state = wdev->config_state;
- wdev->config_state = IFC_NORMAL;
switch(state) {
case IFC_NORMAL:
case IFC_RELOAD:
switch(state) {
case IFC_NORMAL:
case IFC_RELOAD:
+ wdev->config_state = IFC_NORMAL;
if (wdev->autostart)
__wireless_device_set_up(wdev);
break;
if (wdev->autostart)
__wireless_device_set_up(wdev);
break;
@@
-394,12
+395,10
@@
wireless_device_set_down(struct wireless_device *wdev)
static void
wdev_set_config_state(struct wireless_device *wdev, enum interface_config_state s)
{
static void
wdev_set_config_state(struct wireless_device *wdev, enum interface_config_state s)
{
- enum interface_config_state old_state = wdev->config_state;
-
- wdev->config_state = s;
- if (old_state != IFC_NORMAL)
+ if (wdev->config_state != IFC_NORMAL)
return;
return;
+ wdev->config_state = s;
if (wdev->state == IFS_DOWN)
wdev_handle_config_change(wdev);
else
if (wdev->state == IFS_DOWN)
wdev_handle_config_change(wdev);
else