summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2015-08-01 17:22:39 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2015-08-01 17:22:39 +0100
commit419b9a774b533462d9fa59e8733425a7e33c3efc (patch)
treefbb0b8873055e5db5fdb79ec0415fcdbe1b71edd
parent32efbef928f239b1dc35d1ecd6a0baed1893291e (diff)
downloadlibdom-419b9a774b533462d9fa59e8733425a7e33c3efc.tar.gz
libdom-419b9a774b533462d9fa59e8733425a7e33c3efc.tar.bz2
Fix removal of event listeners.
-rw-r--r--src/events/event_target.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/events/event_target.c b/src/events/event_target.c
index 6df683d..cb4e25b 100644
--- a/src/events/event_target.c
+++ b/src/events/event_target.c
@@ -109,6 +109,13 @@ dom_exception _dom_event_target_remove_event_listener(
if (dom_string_isequal(le->type, type) &&
le->listener == listener &&
le->capture == capture) {
+ if (le->list.next == &le->list) {
+ eti->listeners = NULL;
+ } else {
+ eti->listeners =
+ (struct listener_entry *)
+ le->list.next;
+ }
list_del(&le->list);
dom_event_listener_unref(le->listener);
dom_string_unref(le->type);
@@ -117,7 +124,7 @@ dom_exception _dom_event_target_remove_event_listener(
}
le = (struct listener_entry *) le->list.next;
- } while (le != eti->listeners);
+ } while (eti->listeners != NULL && le != eti->listeners);
}
return DOM_NO_ERR;