Jacek Caban : vbscript: Properly release global variables.

Alexandre Julliard julliard at winehq.org
Fri Oct 14 14:14:49 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Oct 14 16:22:18 2011 +0200

vbscript: Properly release global variables.

---

 dlls/vbscript/interp.c   |    9 +++++++++
 dlls/vbscript/vbscript.c |    3 +++
 dlls/vbscript/vbscript.h |    1 +
 3 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 08bf710..f036557 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -1561,11 +1561,20 @@ OP_LIST
 #undef X
 };
 
+void release_dynamic_vars(dynamic_var_t *var)
+{
+    while(var) {
+        VariantClear(&var->v);
+        var = var->next;
+    }
+}
+
 static void release_exec(exec_ctx_t *ctx)
 {
     unsigned i;
 
     VariantClear(&ctx->ret_val);
+    release_dynamic_vars(ctx->dynamic_vars);
 
     if(ctx->this_obj)
         IDispatch_Release(ctx->this_obj);
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index ffaa63e..af037bd 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -114,6 +114,9 @@ static void release_script(script_ctx_t *ctx)
 {
     collect_objects(ctx);
 
+    release_dynamic_vars(ctx->global_vars);
+    ctx->global_vars = NULL;
+
     while(!list_empty(&ctx->named_items)) {
         named_item_t *iter = LIST_ENTRY(list_head(&ctx->named_items), named_item_t, entry);
 
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index 9e18f47..890c7c7 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -309,6 +309,7 @@ struct _vbscode_t {
 void release_vbscode(vbscode_t*) DECLSPEC_HIDDEN;
 HRESULT compile_script(script_ctx_t*,const WCHAR*,vbscode_t**) DECLSPEC_HIDDEN;
 HRESULT exec_script(script_ctx_t*,function_t*,IDispatch*,DISPPARAMS*,VARIANT*) DECLSPEC_HIDDEN;
+void release_dynamic_vars(dynamic_var_t*) DECLSPEC_HIDDEN;
 
 #define TID_LIST \
     XDIID(ErrObj) \




More information about the wine-cvs mailing list