summaryrefslogtreecommitdiff
path: root/plugins/ethernet.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-06-30 08:13:57 +0200
committerMarcel Holtmann <marcel@holtmann.org>2008-06-30 08:13:57 +0200
commit75a6e88c0ba882f357a083b06ac8ba1436a717bb (patch)
tree3d8fd9e5508af7c0a3a8a0c31226311d3d8432ef /plugins/ethernet.c
parent7b6b9ae35896904a3eaf95b09ab81bf448c2f4ac (diff)
downloadconnman-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.c13
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);