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