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

Reply via email to