Changeset: 4ec505c1f7c0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ec505c1f7c0
Modified Files:
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_stack.c
Branch: malupgrade
Log Message:

Calculate proper stack size


diffs (83 lines):

diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -158,7 +158,7 @@ resizeMalBlk(MalBlkPtr mb, int elements)
                        mb->ssize = elements;
                } else {
                        mb->errors++;
-                       showException(GDKout, MAL, "resizeMalBlk", "out of 
memory (requested: %ld bytes)", elements * sizeof(InstrPtr));
+                       showException(GDKout, MAL, "resizeMalBlk", "out of 
memory (requested: "LLFMT" bytes)", (lng) elements * sizeof(InstrPtr));
                }
        }
 
@@ -170,7 +170,7 @@ resizeMalBlk(MalBlkPtr mb, int elements)
                        mb->vsize = elements;
                } else{
                        mb->errors++;
-                       showException(GDKout, MAL, "resizeMalBlk", "out of 
memory (requested: %ld bytes)", elements * sizeof (VarRecord));
+                       showException(GDKout, MAL, "resizeMalBlk", "out of 
memory (requested: "LLFMT" bytes)", (lng) elements * sizeof(InstrPtr));
                }
        }
 }
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -859,6 +859,7 @@ term(Client cntxt, MalBlkPtr curBlk, Ins
                                setPolymorphic(*curInstr, cst.vtype, FALSE);
                                free = 0;
                        }
+                       /* protect against leaks coming from constant reuse */
                        if (free && ATOMextern(cst.vtype) && cst.val.pval)
                                VALclear(&cst);
                        *curInstr = pushArgument(curBlk, *curInstr, cstidx);
@@ -869,8 +870,6 @@ term(Client cntxt, MalBlkPtr curBlk, Ins
                        tpe = typeElm(cntxt, cst.vtype);
                        if (tpe < 0)
                                return 3;
-                       //if( cst.vtype == TYPE_str)
-                               //mnstr_printf(cntxt->fdout,"#tpe %d cstvtype 
%d %s\n", tpe,cst.vtype, (char*)cst.val.pval);
                        cstidx = defConstant(curBlk, tpe, &cst);
                        setPolymorphic(*curInstr, tpe, FALSE);
                        if (flag)
diff --git a/monetdb5/mal/mal_stack.c b/monetdb5/mal/mal_stack.c
--- a/monetdb5/mal/mal_stack.c
+++ b/monetdb5/mal/mal_stack.c
@@ -55,30 +55,30 @@
 /* #define DEBUG_MAL_STACK*/
 
 MalStkPtr
-newGlobalStack(int size)
+newGlobalStack(int elements)
 {
        MalStkPtr s;
 
-       s = (MalStkPtr) GDKzalloc(stackSize(size) + offsetof(MalStack, stk));
+       s = (MalStkPtr) GDKzalloc(stackSize(elements) );
        if (s == NULL)
                showException(GDKout,MAL,"newGlobalStack",MAL_MALLOC_FAIL);
        else
-               s->stksize = size;
+               s->stksize = elements;
        return s;
 }
 
 MalStkPtr
-reallocGlobalStack(MalStkPtr old, int cnt)
+reallocGlobalStack(MalStkPtr old, int elements)
 {
        MalStkPtr s;
 
-       if (old->stksize > cnt)
+       if (old->stksize > elements)
                return old;
 
-       s =  (MalStkPtr) GDKrealloc(old, stackSize( cnt));
+       s =  (MalStkPtr) GDKrealloc(old, stackSize( elements));
        if( s) {
-               memset(((char *)s) + stackSize(old->stksize), 0, stackSize(cnt) 
- stackSize(old->stksize) );
-               s->stksize = cnt;
+               memset(((char *)s) + stackSize(old->stksize), 0, 
stackSize(elements) - stackSize(old->stksize) );
+               s->stksize = elements;
        } else
                showException(GDKout,MAL,"reallocGlobalStack",MAL_MALLOC_FAIL);
        return s;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to