diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-06-30 08:13:57 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-06-30 08:13:57 +0200 |
commit | 75a6e88c0ba882f357a083b06ac8ba1436a717bb (patch) | |
tree | 3d8fd9e5508af7c0a3a8a0c31226311d3d8432ef /plugins/ethernet.c | |
parent | 7b6b9ae35896904a3eaf95b09ab81bf448c2f4ac (diff) | |
download | connman-75a6e88c0ba882f357a083b06ac8ba1436a717bb.tar.gz connman-75a6e88c0ba882f357a083b06ac8ba1436a717bb.tar.bz2 connman-75a6e88c0ba882f357a083b06ac8ba1436a717bb.zip |
Fix removing elements from list
Diffstat (limited to 'plugins/ethernet.c')
-rw-r--r-- | plugins/ethernet.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/plugins/ethernet.c b/plugins/ethernet.c index 03c52d26..8905223c 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c @@ -62,23 +62,28 @@ static void create_element(struct connman_element *parent, static void remove_elements(struct connman_element *parent) { - GSList *list; + GSList *list = element_list; DBG("parent %p name %s", parent, parent->name); g_static_mutex_lock(&element_mutex); - for (list = element_list; list; list = list->next) { + while (list) { + GSList *next = list->next; struct connman_element *element = list->data; - if (element->netdev.index != parent->netdev.index) + if (element->netdev.index != parent->netdev.index) { + list = next; continue; + } - element_list = g_slist_remove(element_list, element); + element_list = g_slist_delete_link(element_list, list); connman_element_unregister(element); connman_element_unref(element); + + list = next; } g_static_mutex_unlock(&element_mutex); |