diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2012-02-20 22:48:39 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2012-02-20 22:48:39 +0000 |
commit | ada2afaf1658f4e75e09b17f306766b767300734 (patch) | |
tree | b3a19f1433eca4ec3887b032f15933195c7466d1 /src/events/event_target.c | |
parent | b73a0620371157745cb3b4836ecc30ac4b8c2402 (diff) | |
download | libdom-ada2afaf1658f4e75e09b17f306766b767300734.tar.gz libdom-ada2afaf1658f4e75e09b17f306766b767300734.tar.bz2 |
Fix listener list destruction some more
svn path=/trunk/libdom/; revision=13458
Diffstat (limited to 'src/events/event_target.c')
-rw-r--r-- | src/events/event_target.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/events/event_target.c b/src/events/event_target.c index ab47c1d..079d764 100644 --- a/src/events/event_target.c +++ b/src/events/event_target.c @@ -21,7 +21,9 @@ static void event_target_destroy_listeners(struct listener_entry *list) { - while (list != NULL) { + const struct listener_entry *head = list; + + do { struct listener_entry *next = (struct listener_entry *) list->list.next; @@ -31,7 +33,7 @@ static void event_target_destroy_listeners(struct listener_entry *list) free(list); list = next; - } + } while (list != head); } /* Initialise this EventTarget */ @@ -46,7 +48,8 @@ dom_exception _dom_event_target_internal_initialise( /* Finalise this EventTarget */ void _dom_event_target_internal_finalise(dom_event_target_internal *eti) { - event_target_destroy_listeners(eti->listeners); + if (eti->listeners != NULL) + event_target_destroy_listeners(eti->listeners); } /*-------------------------------------------------------------------------*/ |