Changeset: 81293e2793a5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=81293e2793a5
Modified Files:
        MonetDB/src/common/stream.mx
        MonetDB5/src/mal/mal_client.mx
        MonetDB5/src/mal/mal_import.mx
        MonetDB5/src/mal/mal_interpreter.mx
        MonetDB5/src/mal/mal_linker.mx
        MonetDB5/src/mal/mal_parser.mx
        MonetDB5/src/mal/mal_session.mx
        MonetDB5/src/modules/mal/tablet.mx
        MonetDB5/src/optimizer/opt_dataflow.mx
        MonetDB5/src/optimizer/opt_deadcode.mx
        MonetDB5/src/optimizer/opt_garbageCollector.mx
        MonetDB5/src/optimizer/opt_joinpath.mx
        MonetDB5/src/optimizer/opt_mergetable.mx
        MonetDB5/src/optimizer/opt_mitosis.mx
        MonetDB5/src/optimizer/opt_reorder.mx
        sql/src/backends/monet5/sql.mx
        sql/src/backends/monet5/sql_gencode.mx
        sql/src/backends/monet5/sql_optimizer.mx
        sql/src/backends/monet5/sql_scenario.mx
        sql/src/backends/monet5/sql_user.mx
        sql/src/common/sql_list.c
        sql/src/common/sql_string.c
        sql/src/common/sql_string.h
        sql/src/common/sql_types.c
        sql/src/common/sql_types.h
        sql/src/include/sql_catalog.h
        sql/src/include/sql_list.h
        sql/src/include/sql_relation.h
        sql/src/server/bin_optimizer.c
        sql/src/server/rel_bin.c
        sql/src/server/rel_dump.c
        sql/src/server/rel_exp.c
        sql/src/server/rel_exp.h
        sql/src/server/rel_optimizer.c
        sql/src/server/rel_optimizer.h
        sql/src/server/rel_schema.c
        sql/src/server/rel_schema.h
        sql/src/server/rel_select.c
        sql/src/server/rel_select.h
        sql/src/server/rel_semantic.c
        sql/src/server/rel_sequence.c
        sql/src/server/rel_subquery.c
        sql/src/server/rel_trans.c
        sql/src/server/rel_updates.c
        sql/src/server/rel_updates.h
        sql/src/server/rel_xml.c
        sql/src/server/sql_atom.c
        sql/src/server/sql_atom.h
        sql/src/server/sql_env.c
        sql/src/server/sql_mvc.c
        sql/src/server/sql_mvc.h
        sql/src/server/sql_parser.y
        sql/src/server/sql_psm.c
        sql/src/server/sql_rel2bin.c
        sql/src/server/sql_schema.c
        sql/src/server/sql_semantic.c
        sql/src/server/sql_statement.c
        sql/src/server/sql_statement.h
        sql/src/storage/sql_storage.h
        sql/src/storage/store.c
        
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err
        
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.out
        sql/src/test/BugTracker-2010/Tests/between-timestamp.Bug-2718.stable.out
        sql/src/test/BugTracker/Tests/caching.SF-1651599.stable.out
        
sql/src/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
        sql/src/test/leaks/Tests/check0.stable.out
        sql/src/test/leaks/Tests/check1.stable.out
        sql/src/test/leaks/Tests/check2.stable.out
        sql/src/test/leaks/Tests/check3.stable.out
        sql/src/test/leaks/Tests/check4.stable.out
        sql/src/test/leaks/Tests/check5.stable.out
        sql/src/test/mapi/Tests/php_monetdb.stable.out
Branch: default
Log Message:

leak fixing

        m5 optimizers (free instructions inbetween the mb->stop and mb->ssize
                incase we create a new mb->stmt array)

        sql now uses sql_allocator for parsing, relational algebra
        (+optimization) and binary stmt tree (+optimization)
                Solve leaks and reduces nr of malloc (and free) calls

also fixed number of mitosis/mergetable problems


diffs (truncated from 18493 to 300 lines):

diff -r f832603344fb -r 81293e2793a5 MonetDB/src/common/stream.mx
--- a/MonetDB/src/common/stream.mx      Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB/src/common/stream.mx      Wed Nov 24 15:13:17 2010 +0100
@@ -3201,6 +3201,8 @@
 void
 bstream_destroy(bstream *s)
 {
+       s->s->close(s->s);
+       s->s->destroy(s->s);
        free(s->buf);
        free(s);
 }
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_client.mx
--- a/MonetDB5/src/mal/mal_client.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_client.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -344,8 +344,6 @@
        ClientInput *x = c->bak;
        if (c->fdin) {
                /* missing protection against closing stdin stream */
-               (void) mnstr_close(c->fdin->s);
-               (void) mnstr_destroy(c->fdin->s);
                (void) bstream_destroy(c->fdin);
        }
        GDKfree(c->prompt);
@@ -471,8 +469,6 @@
                assert(c->bak==NULL);
                if(c->fdin){
                        /* missing protection against closing stdin stream */
-                       (void) mnstr_close(c->fdin->s);
-                       (void) mnstr_destroy(c->fdin->s);
                        (void) bstream_destroy(c->fdin);
                }
                c->fdout = NULL;
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_import.mx
--- a/MonetDB5/src/mal/mal_import.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_import.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -146,11 +146,8 @@
        MalStkPtr oldglb = c->glb;
 
 @= restoreClient1
-       if (c->fdin) {
-               (void) mnstr_close(c->fdin->s);
-               (void) mnstr_destroy(c->fdin->s);
+       if (c->fdin) 
                (void) bstream_destroy(c->fdin);
-       }
        c->fdin = oldfdin; 
        c->yycur = oldyycur; 
        c->listing = oldlisting;
@@ -187,7 +184,7 @@
        str filename;
        str p;
 
-       bstream *oldfdin = c->fdin;
+       bstream *oldfdin = c->fdin, *cfdin;
        int oldyycur = c->yycur;
        int oldlisting = c->listing;
        int oldmode = c->mode;
@@ -213,16 +210,23 @@
                        c->srcFile = filename;
                        c->yycur = 0;
                        c->bak = NULL;
-                       if ((s = malLoadScript(c, filename, &c->fdin)) == 0) 
+                       if ((s = malLoadScript(c, filename, &c->fdin)) == 0) {
+                               cfdin = c->fdin;
                                parseMAL(c, c->curprg);
+                               bstream_destroy(c->fdin);
+                       }
                        filename = p + 1;
                }
                c->srcFile = filename;
                c->yycur = 0;
                c->bak = NULL;
-               if ((s = malLoadScript(c, filename, &c->fdin)) == 0) 
+               if ((s = malLoadScript(c, filename, &c->fdin)) == 0) {
+                       cfdin = c->fdin;
                        parseMAL(c, c->curprg);
+                       bstream_destroy(cfdin);
+               }
                GDKfree(name);
+               c->fdin = NULL;
        }
 
        @:restoreClient()@
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_interpreter.mx
--- a/MonetDB5/src/mal/mal_interpreter.mx       Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_interpreter.mx       Wed Nov 24 15:13:17 2010 +0100
@@ -2111,16 +2111,16 @@
 }
 @-
 @= patterncall
-       if( pci->fcn== NULL)
+       if (pci->fcn == NULL) {
                ret = createScriptException(mb, stkpc, MAL, NULL,
-                               "address of pattern %s.%s missing", 
pci->modname, pci->fcnname);
-       else {
+                       "address of pattern %s.%s missing", pci->modname, 
pci->fcnname);
+       } else {
                @:safeTarget(@1)@
                ret = (str) (*pci->fcn)(cntxt,mb,stk,pci);
                @:restoreTarget(@1,@3)@
-               @:exceptionHndlr(@1,@2,@3)@
-               @:timingHndlr(@1,@2)@
        }
+       @:exceptionHndlr(@1,@2,@3)@
+       @:timingHndlr(@1,@2)@
 @-
 MAL function calls are relatively expensive, because they have to assemble
 a new stack frame and do housekeeping, such as garbagecollection of all
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_linker.mx
--- a/MonetDB5/src/mal/mal_linker.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_linker.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -398,7 +398,7 @@
                                                return NULL;
                                        }
                                        sprintf(strs[lasts], "%s%c%s%c",
-                                                       fullname, DIR_SEP, 
GDKstrdup(e->d_name), PATH_SEP);
+                                                       fullname, DIR_SEP, 
e->d_name, PATH_SEP);
                                        lasts++;
                                }
                                if (lasts >= MAXMULTISCRIPT)
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_parser.mx
--- a/MonetDB5/src/mal/mal_parser.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_parser.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -970,8 +970,10 @@
        skipToEnd(cntxt);
 
        s = loadLibrary(modnme,FALSE);
-       if (s)
+       if (s) {
                mnstr_printf(cntxt->fdout, "#WARNING: %s\n", s);
+               GDKfree(s);
+       }
        if ( (s = malInclude(cntxt, modnme, 0)) ){
                mnstr_printf(cntxt->fdout, "#WARNING: %s\n", s);
                GDKfree(s);
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/mal/mal_session.mx
--- a/MonetDB5/src/mal/mal_session.mx   Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/mal/mal_session.mx   Wed Nov 24 15:13:17 2010 +0100
@@ -92,7 +92,9 @@
        chkProgram(c->nspace, c->curprg->def);
        if (c->curprg->def->errors)
                showErrors(c);
-       MALengine(c);
+       s = MALengine(c);
+       if (s)
+               GDKfree(s);
        return 1;
 }
 
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/modules/mal/tablet.mx
--- a/MonetDB5/src/modules/mal/tablet.mx        Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/modules/mal/tablet.mx        Wed Nov 24 15:13:17 2010 +0100
@@ -2056,8 +2056,6 @@
                                res = TABLETcollect_bats(as);
                bstream_destroy(b);
        }
-       mnstr_close(s);
-       mnstr_destroy(s);
        TABLETdestroy_format(as);
        return res;
 }
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/optimizer/opt_dataflow.mx
--- a/MonetDB5/src/optimizer/opt_dataflow.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/optimizer/opt_dataflow.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -108,7 +108,7 @@
        int i,j, cnt, start=1,entries=0, actions=0;
        int flowblock= 0, dumbcopy=0;
        InstrPtr *old, q;
-       int limit;
+       int limit, slimit;
        Lifespan span;
 
        /* don't use dataflow on single processor systems */
@@ -124,6 +124,7 @@
        if( span == NULL)
                return 0;
        limit= mb->stop;
+       slimit= mb->ssize;
        old = mb->stmt;
        if ( newMalBlkStmt(mb, mb->ssize+20) <0 ){
                GDKfree(span);
@@ -207,6 +208,9 @@
        for (; i<limit; i++) 
                if (old[i])
                        pushInstruction(mb,old[i]);
+       for (; i<slimit; i++) 
+               if (old[i])
+                       freeInstruction(old[i]);
        GDKfree(old);
        GDKfree(span);
        DEBUGoptimizers
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/optimizer/opt_deadcode.mx
--- a/MonetDB5/src/optimizer/opt_deadcode.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/optimizer/opt_deadcode.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -117,8 +117,8 @@
                if( se){
                        pushInstruction(mb,p);
                        for(i++; i<limit; i++)
-                       if(old[i])
-                               pushInstruction(mb,old[i]);
+                               if(old[i])
+                                       pushInstruction(mb,old[i]);
                        break;
                }
                if( p->token != NOOPsymbol)
diff -r f832603344fb -r 81293e2793a5 
MonetDB5/src/optimizer/opt_garbageCollector.mx
--- a/MonetDB5/src/optimizer/opt_garbageCollector.mx    Wed Nov 24 14:36:27 
2010 +0100
+++ b/MonetDB5/src/optimizer/opt_garbageCollector.mx    Wed Nov 24 15:13:17 
2010 +0100
@@ -155,14 +155,14 @@
 static int
 OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
-       int i, j, k, n = 0, limit, vlimit, depth=0;
+       int i, j, k, n = 0, limit, vlimit, depth=0, slimit;
        InstrPtr p, q, *old;
        int actions = 0;
        Lifespan span;
 
+       (void) pci;
        (void) cntxt;
        (void) stk;
-       (void) pci;
        if (varGetProp(mb, getArg(mb->stmt[0], 0), inlineProp) != NULL)
                return 0;
 
@@ -172,6 +172,7 @@
 
        old= mb->stmt;
        limit = mb->stop;
+       slimit = mb->ssize;
        vlimit = mb->vtop;
        if ( newMalBlkStmt(mb,mb->ssize) < 0) {
                GDKfree(span);
@@ -222,6 +223,9 @@
        pushInstruction(mb, p);
        for (i++; i < limit; i++) 
                pushInstruction(mb, old[i]);
+       for (; i < slimit; i++) 
+               if (old[i])
+                       freeInstruction(old[i]);
        getInstrPtr(mb,0)->gc |= GARBAGECONTROL;
        GDKfree(old);
        OPTDEBUGgarbageCollector{ 
diff -r f832603344fb -r 81293e2793a5 MonetDB5/src/optimizer/opt_joinpath.mx
--- a/MonetDB5/src/optimizer/opt_joinpath.mx    Wed Nov 24 14:36:27 2010 +0100
+++ b/MonetDB5/src/optimizer/opt_joinpath.mx    Wed Nov 24 15:13:17 2010 +0100
@@ -150,7 +150,7 @@
        str leftjoinPathRef = putName("leftjoinPath",12);
        str semijoinPathRef = putName("semijoinPath",12);
        InstrPtr q = NULL, p, *old;
-       int limit;
+       int limit, slimit;
        Candidate *candidate;
 
        candidate = (Candidate *) GDKzalloc(mb->stop * sizeof(Candidate));
@@ -160,14 +160,15 @@
 
        /* collect all candidates */
        limit= mb->stop;
+       slimit= mb->ssize;
        for(i=0, p= getInstrPtr(mb, i); i< limit; i++, p= getInstrPtr(mb, i))
-       if ( getFunctionId(p)== joinPathRef || getFunctionId(p)== 
leftjoinPathRef || getFunctionId(p) == semijoinPathRef)
-               for ( j= p->retc; j< p->argc-1; j++){
+               if ( getFunctionId(p)== joinPathRef || getFunctionId(p)== 
leftjoinPathRef || getFunctionId(p) == semijoinPathRef)
+                       for ( j= p->retc; j< p->argc-1; j++){
                                for (k= 0; k < top; k++)
-                               if ( candidate[k].lvar == getArg(p,j) && 
candidate[k].rvar == getArg(p,j+1) && candidate[k].fcn == getFunctionId(p)){
-                                       candidate[k].cnt++;
-                                       break;
-                               }
+                                       if ( candidate[k].lvar == getArg(p,j) 
&& candidate[k].rvar == getArg(p,j+1) && candidate[k].fcn == getFunctionId(p)){
+                                               candidate[k].cnt++;
+                                               break;
+                                       }
                                if ( k == top && top < mb->stop ){
                                        candidate[k].cnt =1;
                                        candidate[k].lvar = getArg(p,j);
@@ -175,59 +176,61 @@
                                        candidate[k].fcn = getFunctionId(p);
                                        top++;
                                }
-               }
+                       }
 
-       if (top == 0)
+       if (top == 0) {
+               GDKfree(candidate);
                return 0;
+       }
 
        /* now inject and replace the subpaths */
-       old= mb->stmt;
-       if ( newMalBlkStmt(mb,mb->ssize) < 0)
+       old = mb->stmt;
+       if ( newMalBlkStmt(mb,mb->ssize) < 0) {
+               GDKfree(candidate);
                return 0;
+       }
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to