summaryrefslogtreecommitdiff
path: root/src/events
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2012-02-20 22:48:39 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2012-02-20 22:48:39 +0000
commit8d3564767b2101f7166e6d4b6a75dd819ef42769 (patch)
treeb3a19f1433eca4ec3887b032f15933195c7466d1 /src/events
parent13180b36e72d8d5568fdceffb76c5b10422ae7cd (diff)
downloadlibdom-8d3564767b2101f7166e6d4b6a75dd819ef42769.tar.gz
libdom-8d3564767b2101f7166e6d4b6a75dd819ef42769.tar.bz2
Fix listener list destruction some more
svn path=/trunk/libdom/; revision=13458
Diffstat (limited to 'src/events')
-rw-r--r--src/events/event_target.c9
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);
}
/*-------------------------------------------------------------------------*/