Changeset: 1d08156a9d85 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d08156a9d85
Modified Files:
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/opt_remoteQueries.c
        monetdb5/optimizer/opt_support.c
Branch: Jul2017
Log Message:

Fix possible memory leaks


diffs (99 lines):

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
@@ -191,6 +191,8 @@ OPTmultiplexSimple(Client cntxt, MalBlkP
        //MalBlkPtr mb= cntxt->curprg->def;
        int i, doit=0;
        InstrPtr p;
+       str msg = MAL_SUCCEED; 
+
        if(mb)
        for( i=0; i<mb->stop; i++){
                p= getInstrPtr(mb,i);
@@ -200,16 +202,16 @@ OPTmultiplexSimple(Client cntxt, MalBlkP
                }
        }
        if( doit) {
-               str msg = OPTmultiplexImplementation(cntxt, mb, 0, 0);
-               freeException(msg);             /* if (msg) return some error 
as well? */
+               msg = OPTmultiplexImplementation(cntxt, mb, 0, 0);
                chkTypes(cntxt->fdout, cntxt->nspace, mb,TRUE);
                if ( mb->errors == 0) {
                        chkFlow(cntxt->fdout, mb);
                        chkDeclarations(cntxt->fdout,mb);
                }
        }
-       return 0;
+       return msg;
 }
+
 str
 OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
 {
diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -108,6 +108,7 @@ OPTmultiplexInline(Client cntxt, MalBlkP
        int refbat=0, retc = p->retc;
        bit *upgrade;
        Symbol s;
+       str msg;
 
 
        s= findSymbol(cntxt->nspace, 
@@ -273,7 +274,9 @@ terminateMX:
                GDKfree(upgrade);
 
                /* ugh ugh, fallback to non inline, but optimized code */
-               OPTmultiplexSimple(cntxt, s->def);
+               msg = OPTmultiplexSimple(cntxt, s->def);
+               if(msg) 
+                       freeException(msg);
                s->def->inlineProp = 0;
                return 0;
        }
diff --git a/monetdb5/optimizer/opt_remoteQueries.c 
b/monetdb5/optimizer/opt_remoteQueries.c
--- a/monetdb5/optimizer/opt_remoteQueries.c
+++ b/monetdb5/optimizer/opt_remoteQueries.c
@@ -314,7 +314,7 @@ OPTremoteQueriesImplementation(Client cn
                                        q= 
pushArgument(mb,q,location[getArg(p,j)]);
                                        snprintf(buf,BUFSIZ,"io.print(%s);",
                                                getVarName(mb,getArg(p,j)) );
-                                       (void) pushStr(mb,q,buf);
+                                       q=  pushStr(mb,q,buf);
                                        pushInstruction(mb,q);
                                }
                                pushInstruction(mb,p);
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -123,13 +123,15 @@ optimizeMALBlock(Client cntxt, MalBlkPtr
                                msg = (str) (*p->fcn) (cntxt, mb, 0, p);
                                if (msg) {
                                        str place = getExceptionPlace(msg);
-                                       str nmsg = 
createException(getExceptionType(msg), place, "%s", getExceptionMessage(msg));
-                                       if (nmsg && place) {
+                                       str nmsg = NULL;
+                                       if(place){
+                                               nmsg = 
createException(getExceptionType(msg), place, "%s", getExceptionMessage(msg));
+                                               GDKfree(place);
+                                       }
+                                       if (nmsg ) {
                                                freeException(msg);
                                                msg = nmsg;
-                                               GDKfree(place);
-                                       } else
-                                               freeException(nmsg);
+                                       } 
                                        goto wrapup;
                                }
                                if (cntxt->mode == FINISHCLIENT)
@@ -170,7 +172,7 @@ MALoptimizer(Client c)
                return MAL_SUCCEED;
        msg= optimizeMALBlock(c, c->curprg->def);
        if( msg == MAL_SUCCEED)
-               OPTmultiplexSimple(c, c->curprg->def);
+               msg = OPTmultiplexSimple(c, c->curprg->def);
        return msg;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to