Changeset: 64bdbcb27515 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64bdbcb27515
Modified Files:
monetdb5/optimizer/opt_mergetable.c
Branch: Feb2013
Log Message:
fixed memory leak
diffs (79 lines):
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -37,6 +37,7 @@ typedef struct mat {
int pm; /* parent mat, for sub relations */
mat_type_t type; /* type of operation */
int packed;
+ int pushed;
} mat_t;
static mat_type_t
@@ -86,6 +87,7 @@ mat_add(mat_t *mat, int mtop, InstrPtr q
mat[mtop].type = type;
mat[mtop].pm = -1;
mat[mtop].packed = 0;
+ mat[mtop].pushed = 0;
(void)func;
//printf (" mtop %d %s\n", mtop, func);
return mtop+1;
@@ -103,6 +105,7 @@ mat_add_var(mat_t *mat, int mtop, InstrP
mat[mtop].im = inputmat;
mat[mtop].pm = parentmat;
mat[mtop].packed = 0;
+ mat[mtop].pushed = 1;
return mtop+1;
}
@@ -781,6 +784,7 @@ mat_group_attr(MalBlkPtr mb, mat_t *mat,
if (push)
pushInstruction(mb,attr);
mtop = mat_add_var(mat, mtop, attr, NULL, getArg(attr, 0),
mat_ext, -1, -1);
+ mat[mtop-1].pushed = push;
/* keep new attribute with the group extend */
mat[aext].im = mtop-1;
}
@@ -853,6 +857,7 @@ mat_group_new(MalBlkPtr mb, InstrPtr p,
/* create mat's for the intermediates */
a = mtop = mat_add_var(mat, mtop, attr, NULL, getArg(attr, 0), mat_ext,
-1, -1);
+ mat[mtop-1].pushed = push;
g = mtop = mat_add_var(mat, mtop, r0, p, getArg(p, 0), mat_grp, b, -1);
mtop = mat_add_var(mat, mtop, r1, p, getArg(p, 1), mat_ext, a-1,
mtop-1); /* point back at group */
mtop = mat_add_var(mat, mtop, r2, p, getArg(p, 2), mat_cnt, -1,
mtop-1); /* point back at ext */
@@ -937,6 +942,7 @@ mat_group_derive(MalBlkPtr mb, InstrPtr
/* create mat's for the intermediates */
a = mtop = mat_add_var(mat, mtop, attr, NULL, getArg(attr, 0), mat_ext,
-1, -1);
+ mat[mtop-1].pushed = push;
g = mtop = mat_add_var(mat, mtop, r0, p, getArg(p, 0), mat_grp, b, g);
mtop = mat_add_var(mat, mtop, r1, p, getArg(p, 1), mat_ext, a-1,
mtop-1); /* point back at group */
mtop = mat_add_var(mat, mtop, r2, p, getArg(p, 2), mat_cnt, -1,
mtop-1); /* point back at ext */
@@ -1070,6 +1076,7 @@ mat_topn(MalBlkPtr mb, InstrPtr p, mat_t
}
mtop = mat_add_var(mat, mtop, pck, p, getArg(p,0),
is_slice?mat_slc:mat_tpn, (n>=0)?n:m, (n>=0)?m:-1);
+ mat[mtop-1].pushed = 0;
if (is_slice) {
/* real instruction */
@@ -1157,6 +1164,7 @@ OPTmergetableImplementation(Client cntxt
(getFunctionId(p) == newRef || getFunctionId(p) == packRef)){
mat_set_prop(mb, p);
mtop = mat_add(mat, mtop, p, mat_none,
getFunctionId(p));
+ mat[mtop-1].pushed = 1;
continue;
}
@@ -1406,7 +1414,10 @@ OPTmergetableImplementation(Client cntxt
freeInstruction(old[i]);
GDKfree(old);
}
-
+ for (i=0; i<mtop; i++) {
+ if (mat[i].mi && !mat[i].pushed)
+ freeInstruction(mat[i].mi);
+ }
GDKfree(mat);
return actions;
}
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list