Changeset: f1245befe759 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f1245befe759 Modified Files: monetdb5/optimizer/opt_mergetable.c Branch: Jun2016 Log Message:
Memory leak. diffs (124 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 @@ -27,7 +27,7 @@ typedef struct mat { int pm; /* parent mat, for sub relations */ mat_type_t type; /* type of operation */ int packed; - int pushed; + int pushed; /* set if instruction pushed and shouldn't be freed */ } mat_t; typedef struct matlist { @@ -81,7 +81,7 @@ nr_of_bats(MalBlkPtr mb, InstrPtr p) /* some mat's have intermediates (with intermediate result variables), therefor * we pass the old output mat variable */ inline static void -mat_add_var(matlist_t *ml, InstrPtr q, InstrPtr p, int var, mat_type_t type, int inputmat, int parentmat) +mat_add_var(matlist_t *ml, InstrPtr q, InstrPtr p, int var, mat_type_t type, int inputmat, int parentmat, int pushed) { mat_t *dst = &ml->v[ml->top]; if (ml->top == ml->size) { @@ -102,15 +102,14 @@ mat_add_var(matlist_t *ml, InstrPtr q, I dst->im = inputmat; dst->pm = parentmat; dst->packed = 0; - dst->pushed = 1; + dst->pushed = pushed; ++ml->top; } inline static void -mat_add(matlist_t *ml, InstrPtr q, mat_type_t type, char *func) +mat_add(matlist_t *ml, InstrPtr q, mat_type_t type, const char *func) { - mat_add_var(ml, q, NULL, getArg(q,0), type, -1, -1); - ml->v[ml->top-1].pushed = 0; + mat_add_var(ml, q, NULL, getArg(q,0), type, -1, -1, 0); (void)func; //printf (" ml.top %d %s\n", ml.top, func); } @@ -436,7 +435,7 @@ mat_apply3(MalBlkPtr mb, InstrPtr p, mat } } for(k=0; k < p->retc; k++) { - mat_add_var(ml, r[k], NULL, getArg(r[k], 0), mat_type(ml->v, m), -1, -1); + mat_add_var(ml, r[k], NULL, getArg(r[k], 0), mat_type(ml->v, m), -1, -1, 1); pushInstruction(mb, r[k]); } GDKfree(r); @@ -1102,8 +1101,7 @@ mat_group_attr(MalBlkPtr mb, matlist_t * } if (push) pushInstruction(mb,attr); - mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1); - ml->v[ml->top-1].pushed = push; + mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1, push); /* keep new attribute with the group extend */ ml->v[aext].im = ml->top-1; } @@ -1178,12 +1176,11 @@ mat_group_new(MalBlkPtr mb, InstrPtr p, /* create mat's for the intermediates */ a = ml->top; - mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1); - ml->v[a].pushed = push; + mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1, push); g = ml->top; - mat_add_var(ml, r0, p, getArg(p, 0), mat_grp, b, -1); - mat_add_var(ml, r1, p, getArg(p, 1), mat_ext, a, ml->top-1); /* point back at group */ - mat_add_var(ml, r2, p, getArg(p, 2), mat_cnt, -1, ml->top-1); /* point back at ext */ + mat_add_var(ml, r0, p, getArg(p, 0), mat_grp, b, -1, 1); + mat_add_var(ml, r1, p, getArg(p, 1), mat_ext, a, ml->top-1, 1); /* point back at group */ + mat_add_var(ml, r2, p, getArg(p, 2), mat_cnt, -1, ml->top-1, 1); /* point back at ext */ if (push) mat_pack_group(mb, ml, g); } @@ -1267,12 +1264,11 @@ mat_group_derive(MalBlkPtr mb, InstrPtr /* create mat's for the intermediates */ a = ml->top; - mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1); - ml->v[a].pushed = push; - mat_add_var(ml, r0, p, getArg(p, 0), mat_grp, b, g); + mat_add_var(ml, attr, NULL, getArg(attr, 0), mat_ext, -1, -1, push); + mat_add_var(ml, r0, p, getArg(p, 0), mat_grp, b, g, 1); g = ml->top-1; - mat_add_var(ml, r1, p, getArg(p, 1), mat_ext, a, ml->top-1); /* point back at group */ - mat_add_var(ml, r2, p, getArg(p, 2), mat_cnt, -1, ml->top-1); /* point back at ext */ + mat_add_var(ml, r1, p, getArg(p, 1), mat_ext, a, ml->top-1, 1); /* point back at group */ + mat_add_var(ml, r2, p, getArg(p, 2), mat_cnt, -1, ml->top-1, 1); /* point back at ext */ if (push) mat_pack_group(mb, ml, g); @@ -1409,10 +1405,9 @@ mat_topn(MalBlkPtr mb, InstrPtr p, matli } piv = ml->top; - mat_add_var(ml, pck, p, getArg(p,0), is_slice?mat_slc:mat_tpn, m, n); - ml->v[ml->top-1].pushed = 0; + mat_add_var(ml, pck, p, getArg(p,0), is_slice?mat_slc:mat_tpn, m, n, 0); if (with_groups) - mat_add_var(ml, gpck, p, getArg(p,1), is_slice?mat_slc:mat_tpn, m, piv); + mat_add_var(ml, gpck, p, getArg(p,1), is_slice?mat_slc:mat_tpn, m, piv, 0); if (is_slice || p->retc ==1 /* single result, ie last of the topn's */) { if (ml->v[m].type == mat_tpn || !is_slice) @@ -1461,7 +1456,7 @@ mat_sample(MalBlkPtr mb, InstrPtr p, mat } piv = ml->top; - mat_add_var(ml, pck, p, getArg(p,0), mat_slc, m, -1); + mat_add_var(ml, pck, p, getArg(p,0), mat_slc, m, -1, 1); pushInstruction(mb,pck); q = copyInstruction(p); @@ -1547,7 +1542,7 @@ OPTmergetableImplementation(Client cntxt if (getModuleId(p) == matRef && (getFunctionId(p) == newRef || getFunctionId(p) == packRef)){ mat_set_prop(&ml, mb, p); - mat_add_var(&ml, p, NULL, getArg(p,0), mat_none, -1, -1); + mat_add_var(&ml, p, NULL, getArg(p,0), mat_none, -1, -1, 1); continue; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list