Jacek Caban : mshtml: Pass event target as EventTarget to release_event_target.
Alexandre Julliard
julliard at winehq.org
Tue Feb 14 16:24:51 CST 2017
Module: wine
Branch: master
Commit: bc02ba80b922f0e62e00cb366e0f592115b4a63d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc02ba80b922f0e62e00cb366e0f592115b4a63d
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Feb 13 21:11:50 2017 +0100
mshtml: Pass event target as EventTarget to release_event_target.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlevent.c | 21 +++++++++++++--------
dlls/mshtml/htmlevent.h | 2 +-
dlls/mshtml/htmlnode.c | 3 +--
dlls/mshtml/htmlwindow.c | 3 +--
4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index e844728..7d11747 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1642,20 +1642,25 @@ HRESULT doc_init_events(HTMLDocumentNode *doc)
return S_OK;
}
-void release_event_target(event_target_t *event_target)
+void release_event_target(EventTarget *event_target)
{
int i;
unsigned int j;
+ if(!event_target->ptr)
+ return;
+
for(i=0; i < EVENTID_LAST; i++) {
- if(event_target->event_table[i]) {
- if(event_target->event_table[i]->handler_prop)
- IDispatch_Release(event_target->event_table[i]->handler_prop);
- for(j=0; j < event_target->event_table[i]->handler_cnt; j++)
- if(event_target->event_table[i]->handlers[j])
- IDispatch_Release(event_target->event_table[i]->handlers[j]);
+ if(event_target->ptr->event_table[i]) {
+ if(event_target->ptr->event_table[i]->handler_prop)
+ IDispatch_Release(event_target->ptr->event_table[i]->handler_prop);
+ for(j=0; j < event_target->ptr->event_table[i]->handler_cnt; j++)
+ if(event_target->ptr->event_table[i]->handlers[j])
+ IDispatch_Release(event_target->ptr->event_table[i]->handlers[j]);
+ heap_free(event_target->ptr->event_table[i]->handlers);
+ heap_free(event_target->ptr->event_table[i]);
}
}
- heap_free(event_target);
+ heap_free(event_target->ptr);
}
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index cc16fd8..d66f359 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -55,7 +55,7 @@ typedef enum {
eventid_t str_to_eid(LPCWSTR) DECLSPEC_HIDDEN;
void check_event_attr(HTMLDocumentNode*,nsIDOMHTMLElement*) DECLSPEC_HIDDEN;
-void release_event_target(event_target_t*) DECLSPEC_HIDDEN;
+void release_event_target(EventTarget*) DECLSPEC_HIDDEN;
void fire_event(HTMLDocumentNode*,eventid_t,BOOL,HTMLDOMNode*,nsIDOMEvent*,IDispatch*) DECLSPEC_HIDDEN;
HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 1ba477e..ab47323 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -1185,12 +1185,11 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
void HTMLDOMNode_destructor(HTMLDOMNode *This)
{
+ release_event_target(&This->event_target);
if(This->nsnode)
nsIDOMNode_Release(This->nsnode);
if(This->doc && &This->doc->node != This)
htmldoc_release(&This->doc->basedoc);
- if(This->event_target.ptr)
- release_event_target(This->event_target.ptr);
}
static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMNode **ret)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index aa64fb4..e3f22cf 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -253,8 +253,7 @@ static void release_inner_window(HTMLInnerWindow *This)
htmldoc_release(&This->doc->basedoc);
}
- if(This->event_target.ptr)
- release_event_target(This->event_target.ptr);
+ release_event_target(&This->event_target);
release_dispex(&This->event_target.dispex);
for(i=0; i < This->global_prop_cnt; i++)
More information about the wine-cvs
mailing list