Changeset: 8dc454f36317 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8dc454f36317
Modified Files:
monetdb5/optimizer/opt_evaluate.mx
Branch: Dec2011
Log Message:
fix leak in evaluate optimizer
diffs (29 lines):
diff --git a/monetdb5/optimizer/opt_evaluate.mx
b/monetdb5/optimizer/opt_evaluate.mx
--- a/monetdb5/optimizer/opt_evaluate.mx
+++ b/monetdb5/optimizer/opt_evaluate.mx
@@ -205,19 +205,18 @@ OPTevaluateImplementation(Client cntxt,
mnstr_printf(cntxt->fdout, "#result:%s\n", msg
== MAL_SUCCEED ? "ok" : msg);
}
if (msg == MAL_SUCCEED) {
+ int nvar;
ValRecord cst;
cst.vtype = 0;
VALcopy(&cst, &env->stk[getArg(p, 0)]);
/* You may not overwrite constants. They may
be used by
* other instructions */
- getArg(p, 1) = defConstant(mb, getArgType(mb,
p, 0), &cst);
- /* update the stack frame for next evaluations
*/
- if (getArgType(mb, p, 1) == TYPE_str)
- setVarCleanup(mb, getArg(p, 1));
- else
- clrVarCleanup(mb, getArg(p, 1));
- VALcopy(&env->stk[getArg(p, 1)],
&getVarConstant(mb, getArg(p, 1)));
+ nvar = getArg(p, 1) = defConstant(mb,
getArgType(mb, p, 0), &cst);
+ if (nvar > env->stktop) {
+ VALcopy(&env->stk[getArg(p, 1)],
&getVarConstant(mb, getArg(p, 1)));
+ env->stktop = getArg(p, 1);
+ }
alias[getArg(p, 0)] = getArg(p, 1);
p->argc = 2;
p->token = ASSIGNsymbol;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list