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

Reply via email to