Changeset: d70236749efc for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d70236749efc Modified Files: monetdb5/mal/mal_debugger.c monetdb5/mal/mal_function.c monetdb5/mal/mal_listing.c monetdb5/mal/mal_resolve.c monetdb5/modules/mal/remote.c monetdb5/optimizer/opt_multiplex.c Branch: Oct2014 Log Message:
Fix resource leaks: getTypeName returns allocated memory. diffs (274 lines): diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c --- a/monetdb5/mal/mal_debugger.c +++ b/monetdb5/mal/mal_debugger.c @@ -1037,6 +1037,7 @@ mdbSanityCheck(Client cntxt, MalBlkPtr m stk->cmd = 'n'; } GDKfree(nme); + GDKfree(nmeOnStk); } } } diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -286,8 +286,9 @@ int getBarrierEnvelop(MalBlkPtr mb){ static void replaceTypeVar(MalBlkPtr mb, InstrPtr p, int v, malType t){ int j,i,x,y; #ifdef DEBUG_MAL_FCN - mnstr_printf(GDKout,"replace type _%d by type %s\n",v, - getTypeName(t)); + char *tpenme = getTypeName(t); + mnstr_printf(GDKout,"replace type _%d by type %s\n",v, tpenme); + GDKfree(tpenme); #endif for(j=0; j<mb->stop; j++){ p= getInstrPtr(mb,j); @@ -317,18 +318,28 @@ static void replaceTypeVar(MalBlkPtr mb, setAnyColumnIndex(y,tx); setArgType(mb,p,i,y); #ifdef DEBUG_MAL_FCN - mnstr_printf(GDKout," %d replaced %s->%s \n",i,getTypeName(x),getTypeName(y)); + { + char *xnme = getTypeName(x), *ynme = getTypeName(y); + mnstr_printf(GDKout," %d replaced %s->%s \n",i,xnme,ynme); + GDKfree(xnme); + GDKfree(ynme); + } #endif } else if(getColumnIndex(x) == v){ #ifdef DEBUG_MAL_FCN - mnstr_printf(GDKout," replace x= %s polymorphic\n",getTypeName(x)); + char *xnme = getTypeName(x); + mnstr_printf(GDKout," replace x= %s polymorphic\n",xnme); + GDKfree(xnme); #endif setArgType(mb,p,i,t); } #ifdef DEBUG_MAL_FCN - else - mnstr_printf(GDKout," non x= %s %d\n",getTypeName(x),getColumnIndex(x)); + else { + char *xnme = getTypeName(x); + mnstr_printf(GDKout," non x= %s %d\n",xnme,getColumnIndex(x)); + GDKfree(xnme); + } #endif } #ifdef DEBUG_MAL_FCN @@ -417,8 +428,11 @@ cloneFunction(stream *out, Module scope, replaceTypeVar(new->def, pp, getColumnIndex(v), t); } #ifdef DEBUG_MAL_FCN - else - mnstr_printf(out,"%d remains %s\n", i, getTypeName(v)); + else { + char *tpenme = getTypeName(v); + mnstr_printf(out,"%d remains %s\n", i, tpenme); + GDKfree(tpenme); + } #endif /* include the function at the proper place in the scope */ insertSymbolBefore(scope, new, proc); diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c --- a/monetdb5/mal/mal_listing.c +++ b/monetdb5/mal/mal_listing.c @@ -499,11 +499,14 @@ instruction2str(MalBlkPtr mb, MalStkPtr snprintf(ct, 1024+strlen(cv), "=%s", cv); else snprintf(ct, 1024+strlen(cv), "=\"%s\"", cv); - } else - if ( strcmp(cv,"nil") == 0) - snprintf(ct, 1024+strlen(cv), "=%s:%s", cv, getTypeName(getColumnType(getArgType(mb,p,i)))); - else - snprintf(ct, 1024+strlen(cv), "=\"%s\":%s", cv, getTypeName(getColumnType(getArgType(mb,p,i)))); + } else { + char *tpe = getTypeName(getColumnType(getArgType(mb,p,i))); + if ( strcmp(cv,"nil") == 0) + snprintf(ct, 1024+strlen(cv), "=%s:%s", cv, tpe); + else + snprintf(ct, 1024+strlen(cv), "=\"%s\":%s", cv, tpe); + GDKfree(tpe); + } if( cv) GDKfree(cv); cv= ct; } else @@ -525,11 +528,14 @@ instruction2str(MalBlkPtr mb, MalStkPtr snprintf(ct, 1024+strlen(cv), "%s", cv); else snprintf(ct, 1024+strlen(cv), "\"%s\"", cv); - } else - if ( strcmp(cv,"nil") == 0) - snprintf(ct, 1024+strlen(cv), "%s:%s", cv, getTypeName(getColumnType(getArgType(mb,p,i)))); - else - snprintf(ct, 1024+strlen(cv), "\"%s\":%s", cv, getTypeName(getColumnType(getArgType(mb,p,i)))); + } else { + char *tpe = getTypeName(getColumnType(getArgType(mb,p,i))); + if ( strcmp(cv,"nil") == 0) + snprintf(ct, 1024+strlen(cv), "%s:%s", cv, tpe); + else + snprintf(ct, 1024+strlen(cv), "\"%s\":%s", cv, tpe); + GDKfree(tpe); + } if( cv) GDKfree(cv); cv= ct; } else diff --git a/monetdb5/mal/mal_resolve.c b/monetdb5/mal/mal_resolve.c --- a/monetdb5/mal/mal_resolve.c +++ b/monetdb5/mal/mal_resolve.c @@ -308,8 +308,12 @@ findFunctionType(stream *out, Module sco int formal = getArgType(s->def, sig, i); if (resolveType(formal, actual) == -1) { #ifdef DEBUG_MAL_RESOLVE + char *ftpe = getTypeName(formal); + char *atpe = getTypeName(actual); mnstr_printf(out, "unmatched %d formal %s actual %s\n", - i, getTypeName(formal), getTypeName(actual)); + i, ftpe, atpe); + GDKfree(ftpe); + GDKfree(atpe); #endif unmatched = i; break; @@ -326,23 +330,29 @@ findFunctionType(stream *out, Module sco */ #ifdef DEBUG_MAL_RESOLVE if (tracefcn) { + char *tpe, *tpe2; mnstr_printf(out, "finished %s.%s unmatched=%d polymorphic=%d %d\n", getModuleId(sig), getFunctionId(sig), unmatched, sig->polymorphic, p == sig); if (sig->polymorphic) { int l; for (l = 0; l < 2 * p->argc; l++) - if (polytype[l] != TYPE_any) - mnstr_printf(out, "poly %d %s\n", - l, getTypeName(polytype[l])); + if (polytype[l] != TYPE_any) { + tpe = getTypeName(polytype[l]); + mnstr_printf(out, "poly %d %s\n", l, tpe); + GDKfree(tpe); + } } mnstr_printf(out, "-->resolving\n"); printInstruction(out, mb, 0, p, LIST_MAL_ALL); mnstr_printf(out, "++> test against signature\n"); printInstruction(out, s->def, 0, getSignature(s), LIST_MAL_ALL); + tpe = getTypeName(getArgType(mb, p, unmatched)); + tpe2 = getTypeName(getArgType(s->def, sig, unmatched)); mnstr_printf(out, "\nmismatch unmatched %d test %s poly %s\n", - unmatched, getTypeName(getArgType(mb, p, unmatched)), - getTypeName(getArgType(s->def, sig, unmatched))); + unmatched, tpe, tpe2); + GDKfree(tpe); + GDKfree(tpe2); } #endif if (unmatched) { @@ -502,9 +512,12 @@ resolveType(int dsttype, int srctype) { #ifdef DEBUG_MAL_RESOLVE if (tracefcn) { + char *dtpe = getTypeName(dsttype); + char *stpe = getTypeName(srctype); mnstr_printf(GDKout, "resolveType dst %s (%d) %s(%d)\n", - getTypeName(dsttype), dsttype, - getTypeName(srctype), srctype); + dtpe, dsttype, stpe, srctype); + GDKfree(dtpe); + GDKfree(stpe); } #endif if (dsttype == srctype) @@ -556,10 +569,21 @@ resolveType(int dsttype, int srctype) if (tracefcn) { int i1 = getHeadIndex(dsttype); int i2 = getColumnIndex(dsttype); + char *tpe1, *tpe2, *tpe3, *tpe4, *tpe5, *tpe6; + tpe1 = getTypeName(h1); + tpe2 = getTypeName(t1); + tpe3 = getTypeName(h2); + tpe4 = getTypeName(t2); + tpe5 = getTypeName(h3); + tpe6 = getTypeName(t3); mnstr_printf(GDKout, "resolved to bat[:%s,:%s] bat[:%s,:%s]->bat[%s:%d,%s:%d]\n", - getTypeName(h1), getTypeName(t1), - getTypeName(h2), getTypeName(t2), - getTypeName(h3), i1, getTypeName(t3), i2); + tpe1, tpe2, tpe3, tpe4, tpe5, i1, tpe6, i2); + GDKfree(tpe1); + GDKfree(tpe2); + GDKfree(tpe3); + GDKfree(tpe4); + GDKfree(tpe5); + GDKfree(tpe6); } #endif return newBatType(h3, t3); @@ -890,9 +914,12 @@ updateTypeMap(int formal, int actual, in if (formal == TYPE_bat && isaBatType(actual)) return 0; #ifdef DEBUG_MAL_RESOLVE - mnstr_printf(GDKout, "updateTypeMap:"); - mnstr_printf(GDKout, "formal %s ", getTypeName(formal)); - mnstr_printf(GDKout, "actual %s\n", getTypeName(actual)); + { + char *tpe1 = getTypeName(formal), *tpe2 = getTypeName(actual); + mnstr_printf(GDKout, "updateTypeMap:formal %s actual %s\n", tpe1, tpe2); + GDKfree(tpe1); + GDKfree(tpe2); + } #endif if ((h = getColumnIndex(formal))) { diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c --- a/monetdb5/modules/mal/remote.c +++ b/monetdb5/modules/mal/remote.c @@ -488,8 +488,12 @@ str RMTget(Client cntxt, MalBlkPtr mb, M v = getArgReference(stk, pci, 0); if (rtype == TYPE_any || isAnyExpression(rtype)) { - throw(MAL, "remote.get", ILLEGAL_ARGUMENT ": unsupported any type: %s", - getTypeName(rtype)); + char *tpe, *msg; + tpe = getTypeName(rtype); + msg = createException(MAL, "remote.get", ILLEGAL_ARGUMENT ": unsupported any type: %s", + tpe); + GDKfree(tpe); + return msg; } /* check if the remote type complies with what we expect. Since the put() encodes the type as known to the remote site @@ -682,9 +686,12 @@ str RMTput(Client cntxt, MalBlkPtr mb, M /* depending on the input object generate actions to store the * object remotely*/ if (type == TYPE_any || isAnyExpression(type)) { + char *tpe, *msg; MT_lock_unset(&c->lock, "remote.put"); - throw(MAL, "remote.put", "unsupported type: %s", - getTypeName(type)); + tpe = getTypeName(type); + msg = createException(MAL, "remote.put", "unsupported type: %s", tpe); + GDKfree(tpe); + return msg; } else if (isaBatType(type)) { BATiter bi; /* naive approach using bat.new() and bat.insert() calls */ diff --git a/monetdb5/optimizer/opt_multiplex.c b/monetdb5/optimizer/opt_multiplex.c --- a/monetdb5/optimizer/opt_multiplex.c +++ b/monetdb5/optimizer/opt_multiplex.c @@ -89,9 +89,12 @@ OPTexpandMultiplex(Client cntxt, MalBlkP throw(MAL, "optimizer.multiplex", "Iterator BAT type is missing"); OPTDEBUGmultiplex { + char *tpenme; mnstr_printf(cntxt->fdout,"#calling the optimize multiplex script routine\n"); printFunction(cntxt->fdout,mb, 0, LIST_MAL_ALL ); - mnstr_printf(cntxt->fdout,"#multiplex against operator %d %s\n",iter, getTypeName(getVarType(mb,iter))); + tpenme = getTypeName(getVarType(mb,iter)); + mnstr_printf(cntxt->fdout,"#multiplex against operator %d %s\n",iter, tpenme); + GDKfree(tpenme); printInstruction(cntxt->fdout,mb, 0, pci,LIST_MAL_ALL); } /* _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list