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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list