From: Gabriel Ivăncescu gabrielopcode@gmail.com
And move the clear to the destructor.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 18 ++++++++++++++++-- dlls/mshtml/mshtml_private.h | 6 ++++++ 2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 2c518464246..6b5ea716a75 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -2462,7 +2462,14 @@ static void DOMCustomEvent_unlink(DispatchEx *dispex) { DOMCustomEvent *custom_event = DOMCustomEvent_from_DOMEvent(DOMEvent_from_DispatchEx(dispex)); DOMEvent_unlink(&custom_event->event.dispex); + unlink_variant(&custom_event->detail); +} + +static void DOMCustomEvent_destructor(DispatchEx *dispex) +{ + DOMCustomEvent *custom_event = DOMCustomEvent_from_DOMEvent(DOMEvent_from_DispatchEx(dispex)); VariantClear(&custom_event->detail); + DOMEvent_destructor(dispex); }
typedef struct { @@ -2607,7 +2614,14 @@ static void DOMMessageEvent_unlink(DispatchEx *dispex) { DOMMessageEvent *message_event = DOMMessageEvent_from_DOMEvent(DOMEvent_from_DispatchEx(dispex)); DOMEvent_unlink(&message_event->event.dispex); + unlink_variant(&message_event->data); +} + +static void DOMMessageEvent_destructor(DispatchEx *dispex) +{ + DOMMessageEvent *message_event = DOMMessageEvent_from_DOMEvent(DOMEvent_from_DispatchEx(dispex)); VariantClear(&message_event->data); + DOMEvent_destructor(dispex); }
static void DOMMessageEvent_init_dispex_info(dispex_data_t *info, compat_mode_t compat_mode) @@ -3038,7 +3052,7 @@ static dispex_static_data_t DOMPageTransitionEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMCustomEvent_dispex_vtbl = { - DOMEvent_destructor, + DOMCustomEvent_destructor, DOMCustomEvent_unlink };
@@ -3056,7 +3070,7 @@ static dispex_static_data_t DOMCustomEvent_dispex = { };
static const dispex_static_data_vtbl_t DOMMessageEvent_dispex_vtbl = { - DOMEvent_destructor, + DOMMessageEvent_destructor, DOMMessageEvent_unlink };
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index ff6294749cd..6d57a314870 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1497,6 +1497,12 @@ static inline void unlink_ref(void *p) } }
+static inline void unlink_variant(VARIANT *v) +{ + if(V_VT(v) == VT_DISPATCH || V_VT(v) == VT_UNKNOWN) + unlink_ref(&V_UNKNOWN(v)); +} + #ifdef __i386__ extern void *call_thiscall_func; #endif