Changeset: 9797d4c79199 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9797d4c79199 Modified Files: monetdb5/mal/mal_interpreter.mx Branch: Aug2011 Log Message:
Avoid alloca in interpreter. diffs (84 lines): diff --git a/monetdb5/mal/mal_interpreter.mx b/monetdb5/mal/mal_interpreter.mx --- a/monetdb5/mal/mal_interpreter.mx +++ b/monetdb5/mal/mal_interpreter.mx @@ -434,9 +434,9 @@ #if FAST int stamp = -1; #endif - bat *backup = (bat*)alloca(mb->maxarg * sizeof(bat)); - str *sbackup = (str*)alloca(mb->maxarg * sizeof(str)); - int *garbage = (int*)alloca(mb->maxarg * sizeof(int)); + bat *backup = (bat*)GDKzalloc(mb->maxarg * sizeof(bat)); + str *sbackup = (str*)GDKzalloc(mb->maxarg * sizeof(str)); + int *garbage = (int*)GDKzalloc(mb->maxarg * sizeof(int)); lng oldtimer = 0; struct Mallinfo oldMemory; int stkpc = 0; @@ -529,6 +529,9 @@ } } @:MALwrapup@ + GDKfree(backup); + GDKfree(sbackup); + GDKfree(garbage); return ret; } @- Out of order execution @@ -894,9 +897,9 @@ #if FAST int stamp = -1; #endif - bat *backup = (bat*)alloca(fs->mb->maxarg * sizeof(bat)); - str *sbackup = (str*)alloca(fs->mb->maxarg * sizeof(str)); - int *garbage = (int*)alloca(fs->mb->maxarg * sizeof(int)); + bat *backup = (bat*)GDKzalloc(fs->mb->maxarg * sizeof(bat)); + str *sbackup = (str*)GDKzalloc(fs->mb->maxarg * sizeof(str)); + int *garbage = (int*)GDKzalloc(fs->mb->maxarg * sizeof(int)); Client cntxt = fs->cntxt; MalBlkPtr mb = fs->mb; MalStkPtr stk = fs->stk; @@ -939,6 +942,9 @@ /* need a way to skip */ stkpc = mb->stop; fs->state = -1; + GDKfree(backup); + GDKfree(sbackup); + GDKfree(garbage); return ret; } if (oldtimer) { @@ -963,19 +969,19 @@ @c switch (pci->token) { case ASSIGNsymbol: - @:assignStmt(FAST,fs->pc = -fs->pc; return ret,t)@ + @:assignStmt(FAST,fs->pc = -fs->pc; GDKfree(backup); GDKfree(sbackup);GDKfree(garbage); return ret,t)@ break; case PATcall: - @:patterncall(FAST,fs->pc = -fs->pc; return ret,t)@ + @:patterncall(FAST,fs->pc = -fs->pc; GDKfree(backup); GDKfree(sbackup);GDKfree(garbage); return ret,t)@ break; case CMDcall: - @:commandcall(FAST,fs->pc = -fs->pc; return ret,t)@ + @:commandcall(FAST,fs->pc = -fs->pc; GDKfree(backup); GDKfree(sbackup);GDKfree(garbage); return ret,t)@ break; case FACcall: - @:factorycall(FAST,fs->pc = -fs->pc; return ret,t)@ + @:factorycall(FAST,fs->pc = -fs->pc; GDKfree(backup); GDKfree(sbackup);GDKfree(garbage); return ret,t)@ break; case FCNcall: - @:functioncall(FAST,fs->pc = -fs->pc; return ret,t)@ + @:functioncall(FAST,fs->pc = -fs->pc; GDKfree(backup); GDKfree(sbackup);GDKfree(garbage); return ret,t)@ break; case NOOPsymbol: case REMsymbol: @@ -992,6 +998,9 @@ @:endProfile(t)@ if (ret) fs->pc = -fs->pc; + GDKfree(backup); + GDKfree(sbackup); + GDKfree(garbage); return ret; } _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list