diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c
index 0b509eca79a..d412b570aec 100644
--- a/dlls/mshtml/htmlnode.c
+++ b/dlls/mshtml/htmlnode.c
@@ -239,10 +239,8 @@ static ULONG WINAPI HTMLDOMChildrenCollection_Release(IHTMLDOMChildrenCollection
TRACE("(%p) ref=%ld\n", This, ref);
- if(!ref) {
- nsIDOMNodeList_Release(This->nslist);
- free(This);
- }
+ if(!ref)
+ release_dispex(&This->dispex);
return ref;
}
@@ -364,6 +362,18 @@ static inline HTMLDOMChildrenCollection *impl_from_DispatchEx(DispatchEx *iface)
return CONTAINING_RECORD(iface, HTMLDOMChildrenCollection, dispex);
}
+static void HTMLDOMChildrenCollection_unlink(DispatchEx *dispex)
+{
+ HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex);
+ unlink_ref(&This->nslist);
+}
+
+static void HTMLDOMChildrenCollection_destructor(DispatchEx *dispex)
+{
+ HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex);
+ free(This);
+}
+
#define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN
static HRESULT HTMLDOMChildrenCollection_get_dispid(DispatchEx *dispex, BSTR name, DWORD flags, DISPID *dispid)
@@ -433,8 +443,8 @@ static HRESULT HTMLDOMChildrenCollection_invoke(DispatchEx *dispex, DISPID id, L
}
static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = {
- NULL,
- NULL,
+ HTMLDOMChildrenCollection_destructor,
+ HTMLDOMChildrenCollection_unlink,
NULL,
HTMLDOMChildrenCollection_get_dispid,
HTMLDOMChildrenCollection_get_name,