diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2015-11-22 12:36:42 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2015-11-22 12:36:42 +0000 |
commit | ed672c93dd99779c90635d063ed5f060e82c6c82 (patch) | |
tree | eacdb96546efe2ffa2c830c260972dded896246f /src/events/event_target.c | |
parent | 3b793e09e53c001ffaf165b41a776f7d9248a381 (diff) | |
download | libdom-ed672c93dd99779c90635d063ed5f060e82c6c82.tar.gz libdom-ed672c93dd99779c90635d063ed5f060e82c6c82.tar.bz2 |
Fix event target listener destruction.
Diffstat (limited to 'src/events/event_target.c')
-rw-r--r-- | src/events/event_target.c | 24 |
1 files changed, 16 insertions, 8 deletions
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; + } } /*-------------------------------------------------------------------------*/ |