[PATCH v4 02/11] msscript.ocx: Don't release the script engine when the control is released.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Jun 15 08:00:05 CDT 2020
Modules must keep refs to the script engine, because the script is closed
only when the last non-detached module is released, even if the control is
not held anymore. put_Language, however, still releases the engine.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/msscript.ocx/msscript.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index 8fb127e..fdf7e7d 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -369,8 +369,6 @@ static void release_script_engine(ScriptHost *host)
host->script_dispatch = NULL;
host->parse = NULL;
host->script = NULL;
-
- IActiveScriptSite_Release(&host->IActiveScriptSite_iface);
}
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
@@ -381,6 +379,7 @@ static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref) {
+ release_script_engine(This);
clear_named_items(This);
heap_free(This);
}
@@ -990,7 +989,7 @@ static HRESULT init_script_host(const CLSID *clsid, ScriptHost **ret)
return S_OK;
failed:
- release_script_engine(host);
+ IActiveScriptSite_Release(&host->IActiveScriptSite_iface);
return hr;
}
@@ -1068,7 +1067,7 @@ static ULONG WINAPI ScriptControl_Release(IScriptControl *iface)
if (This->site)
IOleClientSite_Release(This->site);
if (This->host)
- release_script_engine(This->host);
+ IActiveScriptSite_Release(&This->host->IActiveScriptSite_iface);
release_modules(This);
heap_free(This);
}
@@ -1179,6 +1178,7 @@ static HRESULT WINAPI ScriptControl_put_Language(IScriptControl *iface, BSTR lan
if (This->host) {
release_script_engine(This->host);
+ IActiveScriptSite_Release(&This->host->IActiveScriptSite_iface);
This->host = NULL;
}
--
2.21.0
More information about the wine-devel
mailing list