Jacek Caban : mshtml: Release ActiveX object interfaces in detach_plugin_host.
Module: wine Branch: master Commit: e2d04d3dec8d560a5a9d26f453fa63a304aadba2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e2d04d3dec8d560a5a9d26f453... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Jan 21 15:54:42 2014 +0100 mshtml: Release ActiveX object interfaces in detach_plugin_host. --- dlls/mshtml/pluginhost.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c index 38a8fd5..7c1b760 100644 --- a/dlls/mshtml/pluginhost.c +++ b/dlls/mshtml/pluginhost.c @@ -893,6 +893,29 @@ static ULONG WINAPI PHClientSite_AddRef(IOleClientSite *iface) return ref; } +static void release_plugin_ifaces(PluginHost *This) +{ + if(This->disp) { + IDispatch_Release(This->disp); + This->disp = NULL; + } + + if(This->ip_object) { + IOleInPlaceObject_Release(This->ip_object); + This->ip_object = NULL; + } + + if(This->plugin_unk) { + IUnknown *unk = This->plugin_unk; + LONG ref; + + This->plugin_unk = NULL; + ref = IUnknown_Release(unk); + + TRACE("plugin ref = %d\n", ref); + } +} + static ULONG WINAPI PHClientSite_Release(IOleClientSite *iface) { PluginHost *This = impl_from_IOleClientSite(iface); @@ -901,10 +924,7 @@ static ULONG WINAPI PHClientSite_Release(IOleClientSite *iface) TRACE("(%p) ref=%d\n", This, ref); if(!ref) { - if(This->disp) - IDispatch_Release(This->disp); - if(This->ip_object) - IOleInPlaceObject_Release(This->ip_object); + release_plugin_ifaces(This); if(This->sink) { This->sink->host = NULL; IDispatch_Release(&This->sink->IDispatch_iface); @@ -913,8 +933,6 @@ static ULONG WINAPI PHClientSite_Release(IOleClientSite *iface) list_remove(&This->entry); if(This->element) This->element->plugin_host = NULL; - if(This->plugin_unk) - IUnknown_Release(This->plugin_unk); heap_free(This); } @@ -1687,6 +1705,8 @@ void detach_plugin_host(PluginHost *host) host->sink = NULL; } + release_plugin_ifaces(host); + if(host->element) { host->element->plugin_host = NULL; host->element = NULL;
participants (1)
-
Alexandre Julliard