From ed672c93dd99779c90635d063ed5f060e82c6c82 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sun, 22 Nov 2015 12:36:42 +0000 Subject: Fix event target listener destruction. --- src/events/event_target.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/events/event_target.c') diff --git a/src/events/event_target.c b/src/events/event_target.c index cb4e25b..ef2dc83 100644 --- a/src/events/event_target.c +++ b/src/events/event_target.c @@ -19,18 +19,24 @@ #include "utils/utils.h" #include "utils/validate.h" +static void event_target_destroy_listener(struct listener_entry *e) +{ + list_del(&e->list); + dom_event_listener_unref(e->listener); + dom_string_unref(e->type); + free(e); +} static void event_target_destroy_listeners(struct listener_entry *list) { - struct listener_entry *next = NULL; + struct listener_entry *next; - for (; list != next; list = next) { + while (list != (struct listener_entry *) list->list.next) { next = (struct listener_entry *) list->list.next; - - list_del(&list->list); - dom_event_listener_unref(list->listener); - dom_string_unref(list->type); - free(list); + event_target_destroy_listener(list); + list = next; } + + event_target_destroy_listener(list); } /* Initialise this EventTarget */ @@ -45,8 +51,10 @@ dom_exception _dom_event_target_internal_initialise( /* Finalise this EventTarget */ void _dom_event_target_internal_finalise(dom_event_target_internal *eti) { - if (eti->listeners != NULL) + if (eti->listeners != NULL) { event_target_destroy_listeners(eti->listeners); + eti->listeners = NULL; + } } /*-------------------------------------------------------------------------*/ -- cgit v1.2.3