Commit f43f9676 authored by Gabriel Ivăncescu's avatar Gabriel Ivăncescu Committed by Alexandre Julliard

mshtml: Traverse and unlink builtin func disps.

parent fa63e870
...@@ -2003,7 +2003,17 @@ void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb) ...@@ -2003,7 +2003,17 @@ void dispex_traverse(DispatchEx *This, nsCycleCollectionTraversalCallback *cb)
note_cc_edge((nsISupports*)V_DISPATCH(&prop->var), "dispex_data", cb); note_cc_edge((nsISupports*)V_DISPATCH(&prop->var), "dispex_data", cb);
} }
/* FIXME: Traverse func_disps */ if(This->dynamic_data->func_disps) {
func_obj_entry_t *iter = This->dynamic_data->func_disps, *end = iter + This->info->func_disp_cnt;
for(iter = This->dynamic_data->func_disps; iter < end; iter++) {
if(!iter->func_obj)
continue;
note_cc_edge((nsISupports*)&iter->func_obj->dispex.IDispatchEx_iface, "func_obj", cb);
if(V_VT(&iter->val) == VT_DISPATCH)
note_cc_edge((nsISupports*)V_DISPATCH(&iter->val), "func_val", cb);
}
}
} }
void dispex_unlink(DispatchEx *This) void dispex_unlink(DispatchEx *This)
...@@ -2021,6 +2031,21 @@ void dispex_unlink(DispatchEx *This) ...@@ -2021,6 +2031,21 @@ void dispex_unlink(DispatchEx *This)
VariantClear(&prop->var); VariantClear(&prop->var);
} }
} }
if(This->dynamic_data->func_disps) {
func_obj_entry_t *iter = This->dynamic_data->func_disps, *end = iter + This->info->func_disp_cnt;
for(iter = This->dynamic_data->func_disps; iter < end; iter++) {
if(!iter->func_obj)
continue;
iter->func_obj->obj = NULL;
IDispatchEx_Release(&iter->func_obj->dispex.IDispatchEx_iface);
VariantClear(&iter->val);
}
free(This->dynamic_data->func_disps);
This->dynamic_data->func_disps = NULL;
}
} }
const void *dispex_get_vtbl(DispatchEx *dispex) const void *dispex_get_vtbl(DispatchEx *dispex)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment