Jacek Caban : ieframe: Keep reference to This in all IDocObjectService callback calls.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 11 10:28:10 CST 2015


Module: wine
Branch: master
Commit: f46ee92d906063c5d28bb45812553d989e924a69
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f46ee92d906063c5d28bb45812553d989e924a69

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 11 13:05:54 2015 +0100

ieframe: Keep reference to This in all IDocObjectService callback calls.

---

 dlls/ieframe/shellbrowser.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/dlls/ieframe/shellbrowser.c b/dlls/ieframe/shellbrowser.c
index 216d3f4..51316b4 100644
--- a/dlls/ieframe/shellbrowser.c
+++ b/dlls/ieframe/shellbrowser.c
@@ -708,10 +708,15 @@ static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(
     V_VT(params+6) = (VT_DISPATCH);
     V_DISPATCH(params+6) = (IDispatch*)This->doc_host->wb;
 
+    /* Keep reference to This. It may be released in event handler. */
+    IShellBrowser_AddRef(&This->IShellBrowser_iface);
+
     TRACE(">>>\n");
     call_sink(This->doc_host->cps.wbe2, DISPID_BEFORENAVIGATE2, &dp);
     TRACE("<<<\n");
 
+    IShellBrowser_Release(&This->IShellBrowser_iface);
+
     SysFreeString(V_BSTR(&var_url));
     SysFreeString(V_BSTR(&var_headers));
     SysFreeString(V_BSTR(&var_frame_name));
@@ -764,6 +769,9 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
     V_VT(&url_var) = VT_BSTR;
     V_BSTR(&url_var) = url;
 
+    /* Keep reference to This. It may be released in event handler. */
+    IShellBrowser_AddRef(&This->IShellBrowser_iface);
+
     TRACE(">>>\n");
     call_sink(This->doc_host->cps.wbe2, DISPID_NAVIGATECOMPLETE2, &dp);
     TRACE("<<<\n");
@@ -771,6 +779,7 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
     SysFreeString(url);
 
     This->doc_host->busy = VARIANT_FALSE;
+    IShellBrowser_Release(&This->IShellBrowser_iface);
     return S_OK;
 }
 




More information about the wine-cvs mailing list