From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/mshtml/dispex.c | 1 + dlls/mshtml/htmlnode.c | 7 +++---- dlls/mshtml/mshtml_private.h | 14 ++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index aa1708beb39..0ff22dd5a77 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2094,6 +2094,7 @@ void init_dispatch(DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *da dispex->IDispatchEx_iface.lpVtbl = &DispatchExVtbl; dispex->outer = outer; dispex->dynamic_data = NULL; + ccref_init(&dispex->ccref, 1); if(data->vtbl && data->vtbl->get_compat_mode) { /* delayed init */ diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 7a3b390100e..0546ded5f4a 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -501,7 +501,7 @@ static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); LONG ref; - ref = ccref_incr(&This->ccref, (nsISupports*)&This->IHTMLDOMNode_iface); + ref = ccref_incr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface); TRACE("(%p) ref=%ld\n", This, ref); @@ -511,7 +511,7 @@ static ULONG WINAPI HTMLDOMNode_AddRef(IHTMLDOMNode *iface) static ULONG WINAPI HTMLDOMNode_Release(IHTMLDOMNode *iface) { HTMLDOMNode *This = impl_from_IHTMLDOMNode(iface); - LONG ref = ccref_decr(&This->ccref, (nsISupports*)&This->IHTMLDOMNode_iface, &node_ccp); + LONG ref = ccref_decr(&This->event_target.dispex.ccref, (nsISupports*)&This->IHTMLDOMNode_iface, &node_ccp); TRACE("(%p) ref=%ld\n", This, ref); @@ -1490,7 +1490,6 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno node->IHTMLDOMNode2_iface.lpVtbl = &HTMLDOMNode2Vtbl; node->IHTMLDOMNode3_iface.lpVtbl = &HTMLDOMNode3Vtbl; - ccref_init(&node->ccref, 1); EventTarget_Init(&node->event_target, (IUnknown*)&node->IHTMLDOMNode_iface, dispex_data, doc->document_mode); if(&doc->node != node) @@ -1582,7 +1581,7 @@ static nsresult NSAPI HTMLDOMNode_traverse(void *ccp, void *p, nsCycleCollection TRACE("%p\n", This); - describe_cc_node(&This->ccref, "HTMLDOMNode", cb); + describe_cc_node(&This->event_target.dispex.ccref, "HTMLDOMNode", cb); if(This->nsnode) note_cc_edge((nsISupports*)This->nsnode, "This->nsnode", cb); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 96e0e9b7fa7..82f673e8486 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -337,6 +337,11 @@ typedef struct dispex_dynamic_data_t dispex_dynamic_data_t; #define MSHTML_CUSTOM_DISPID_CNT (MSHTML_DISPID_CUSTOM_MAX-MSHTML_DISPID_CUSTOM_MIN) typedef struct DispatchEx DispatchEx; +typedef struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback; + +typedef struct { + UINT_PTR x; +} nsCycleCollectingAutoRefCnt; /* dispex is our base IDispatchEx implementation for all mshtml objects, and the vtbl allows @@ -393,23 +398,18 @@ struct DispatchEx { IDispatchEx IDispatchEx_iface; IUnknown *outer; + nsCycleCollectingAutoRefCnt ccref; dispex_data_t *info; dispex_dynamic_data_t *dynamic_data; }; -typedef struct { - UINT_PTR x; -} nsCycleCollectingAutoRefCnt; - typedef struct { void *vtbl; int ref_flags; void *callbacks; } ExternalCycleCollectionParticipant; -typedef struct nsCycleCollectionTraversalCallback nsCycleCollectionTraversalCallback; - typedef struct { nsresult (NSAPI *traverse)(void*,void*,nsCycleCollectionTraversalCallback*); nsresult (NSAPI *unlink)(void*); @@ -851,8 +851,6 @@ struct HTMLDOMNode { IHTMLDOMNode3 IHTMLDOMNode3_iface; const NodeImplVtbl *vtbl; - nsCycleCollectingAutoRefCnt ccref; - nsIDOMNode *nsnode; HTMLDocumentNode *doc; }; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3542