Changeset: 832885b941eb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=832885b941eb
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
@@ -448,9 +448,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;
@@ -544,6 +544,9 @@
}
}
@:MALwrapup@
+ GDKfree(backup);
+ GDKfree(sbackup);
+ GDKfree(garbage);
return ret;
}
@h
@@ -920,9 +923,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;
@@ -965,6 +968,9 @@
/* need a way to skip */
stkpc = mb->stop;
fs->state = -1;
+ GDKfree(backup);
+ GDKfree(sbackup);
+ GDKfree(garbage);
return ret;
}
if (oldtimer) {
@@ -990,19 +996,19 @@
*/
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:
@@ -1019,6 +1025,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