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

Reply via email to