Gitweb links:
...log
http://git.netsurf-browser.org/libdom.git/shortlog/ed672c93dd99779c90635d...
...commit
http://git.netsurf-browser.org/libdom.git/commit/ed672c93dd99779c90635d06...
...tree
http://git.netsurf-browser.org/libdom.git/tree/ed672c93dd99779c90635d063e...
The branch, master has been updated
via ed672c93dd99779c90635d063ed5f060e82c6c82 (commit)
from 3b793e09e53c001ffaf165b41a776f7d9248a381 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/libdom.git/commit/?id=ed672c93dd99779c9063...
commit ed672c93dd99779c90635d063ed5f060e82c6c82
Author: Michael Drake <tlsa(a)netsurf-browser.org>
Commit: Michael Drake <tlsa(a)netsurf-browser.org>
Fix event target listener destruction.
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;
+ }
}
/*-------------------------------------------------------------------------*/
-----------------------------------------------------------------------
Summary of changes:
src/events/event_target.c | 24 ++++++++++++++++--------
1 file 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;
+ }
}
/*-------------------------------------------------------------------------*/
--
Document Object Model library