Module: wine Branch: master Commit: ac572bc4ae31552074e82c3e8606d240fc6ed8c1 URL: https://gitlab.winehq.org/wine/wine/-/commit/ac572bc4ae31552074e82c3e8606d24...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Tue Aug 15 19:46:27 2023 +0300
mshtml: Move ccref from the node to the dispex.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@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; };