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