Changeset: 88769eed0e7a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/88769eed0e7a
Modified Files:
        clients/Tests/exports.stable.out
        gdk/gdk.h
        gdk/gdk_utils.c
        monetdb5/extras/mal_optimizer_template/opt_sql_append.c
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_session.c
        monetdb5/modules/mal/manifold.c
        monetdb5/modules/mal/orderidx.c
        monetdb5/optimizer/opt_aliases.c
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_deadcode.c
        monetdb5/optimizer/opt_dict.c
        monetdb5/optimizer/opt_evaluate.c
        monetdb5/optimizer/opt_for.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_inline.c
        monetdb5/optimizer/opt_matpack.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_projectionpath.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_querylog.c
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/opt_remoteQueries.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/common/sql_list.c
        sql/include/sql_list.h
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimize_others.c
        sql/server/rel_optimize_proj.c
        sql/server/rel_optimize_sel.c
        sql/server/rel_rel.c
        sql/server/rel_rewriter.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        tools/monetdbe/monetdbe.c
Branch: resource_management
Log Message:

changed api freeInstruction, now needs MalBlkPtr as first arg.
add list_join, for easy combining lists into one (the second arguments nodes 
are swallowed and the list structure is freed)

less zapping of freed structures, is done already on reuse


diffs (truncated from 3490 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -985,8 +985,7 @@ Module fixModule(const char *nme);
 int fndConstant(MalBlkPtr mb, const ValRecord *cst, int depth);
 const char forRef[];
 void freeException(str);
-void freeInstruction(InstrPtr p);
-void freeInstructionX(InstrPtr p, MalBlkPtr mb);
+void freeInstruction(MalBlkPtr mb, InstrPtr p);
 void freeMalBlk(MalBlkPtr mb);
 void freeModule(Module cur);
 void freeModuleList(Module *list);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2531,6 +2531,7 @@ typedef struct allocator {
        size_t freelist_hits; /* number of object reuse*/
        void *freelist; /* list of freed objects */
        void *freelist_blks;    /* list of freed blks */
+       size_t frees;
 
        size_t tmp_used; /* keeps total of tmp allocated bytes */
        bool tmp_active; /* currently only one level of temp usage */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2112,7 +2112,7 @@ sa_free_obj(allocator *pa, void *obj, si
        //}
        //assert (i < pa->nr);
        // put on the freelist
-       freed_t *f = memset(obj, 0, sz);
+       freed_t *f = obj;
        f->sz = sz;
        f->n = pa->freelist;
        pa->freelist = f;
@@ -2236,6 +2236,7 @@ allocator *sa_reset(allocator *sa)
        }
 
        sa->freelist_blks = NULL;
+       sa->frees = 0;
        sa->nr = 1;
        sa->used = 0;
        sa->freelist = NULL;
@@ -2387,6 +2388,7 @@ sa_create(allocator *pa)
        sa->blk_size = SA_BLOCK_SIZE;
        sa->freelist = NULL;
        sa->freelist_blks = NULL;
+       sa->frees = 0;
        sa->used = 0;
        sa->objects = 0;
        sa->inuse = 0;
@@ -2478,8 +2480,8 @@ void
 sa_close(allocator *sa)
 {
        assert(sa->tmp_active);
+       sa_reset(sa);
        sa->tmp_active = 0;
-       sa_reset(sa);
 }
 
 void
@@ -2491,9 +2493,11 @@ sa_free(allocator *sa, void *obj)
        size_t sz = *((size_t *) ptr);
        // double free check point
        assert(*((size_t *) ptr + 1) == CANARY_VALUE);
+       sa->frees++;
        if (sz < SA_BLOCK_SIZE) {
                sa_free_obj(sa, ptr, sz);
        } else {
                // sa_free_blk(sa, ptr);
+               assert(0);
        }
 }
diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c 
b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
--- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
+++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
@@ -195,8 +195,8 @@ OPTsql_appendImplementation(Client cntxt
                                 * q1 = newStmt(mb, algebraRef,sliceRef); */
                                q2 = newInstruction(mb,algebraRef, sliceRef);
                                if (q1 == NULL || q2 == NULL || (getArg(q2,0) = 
newTmpVariable(mb, TYPE_any)) < 0) {
-                                       freeInstruction(q1);
-                                       freeInstruction(q2);
+                                       freeInstruction(mb, q1);
+                                       freeInstruction(mb, q2);
                                        i--;
                                        break;
                                }
@@ -204,8 +204,8 @@ OPTsql_appendImplementation(Client cntxt
                                q2 = pushLng(mb, q2, 0);
                                q2 = pushArgument(mb, q2, getArg(q1, 0));
                                if (mb->errors) {
-                                       freeInstruction(q1);
-                                       freeInstruction(q2);
+                                       freeInstruction(mb, q1);
+                                       freeInstruction(mb, q2);
                                        i--;
                                        break;
                                }
@@ -235,7 +235,7 @@ OPTsql_appendImplementation(Client cntxt
        /* any remaining MAL instruction records are removed */
        for(; i<slimit; i++)
                if (old[i])
-                       freeInstruction(old[i]);
+                       freeInstruction(mb, old[i]);
 
        GDKfree(old);
 
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -39,7 +39,7 @@ newAssignmentArgs(MalBlkPtr mb, int args
                                                                  "Can not 
allocate variable");
                addMalException(mb, msg);
                freeException(msg);
-               freeInstruction(q);
+               freeInstruction(mb, q);
                return NULL;
        }
        getArg(q, 0) = k;
@@ -77,7 +77,7 @@ newStmtArgs(MalBlkPtr mb, const char *mo
                                                                  "Can not 
allocate variable");
                addMalException(mb, msg);
                freeException(msg);
-               freeInstruction(q);
+               freeInstruction(mb, q);
                return NULL;
        }
        return q;
@@ -132,12 +132,12 @@ newComment(MalBlkPtr mb, const char *val
                str msg = createException(MAL, "newComment", "Can not allocate 
comment");
                addMalException(mb, msg);
                freeException(msg);
-               freeInstruction(q);
+               freeInstruction(mb, q);
                return NULL;
        }
        k = defConstant(mb, TYPE_str, &cst);
        if (k < 0) {
-               freeInstruction(q);
+               freeInstruction(mb, q);
                return NULL;
        }
        getArg(q, 0) = k;
@@ -162,7 +162,7 @@ newCatchStmt(MalBlkPtr mb, const char *n
                                                                          "Can 
not allocate variable");
                        addMalException(mb, msg);
                        freeException(msg);
-                       freeInstruction(q);
+                       freeInstruction(mb, q);
                        return NULL;
                }
        }
@@ -186,7 +186,7 @@ newRaiseStmt(MalBlkPtr mb, const char *n
                                                                          "Can 
not allocate variable");
                        addMalException(mb, msg);
                        freeException(msg);
-                       freeInstruction(q);
+                       freeInstruction(mb, q);
                        return NULL;
                }
        }
@@ -210,7 +210,7 @@ newExitStmt(MalBlkPtr mb, const char *nm
                                                                          "Can 
not allocate variable");
                        addMalException(mb, msg);
                        freeException(msg);
-                       freeInstruction(q);
+                       freeInstruction(mb, q);
                        return NULL;
                }
        }
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
@@ -202,8 +202,8 @@ resetMalBlk(MalBlkPtr mb)
        int i;
 
        for (i = 1/*MALCHUNK*/; i < mb->ssize; i++) {
-               // ss
-               freeInstructionX(mb->stmt[i], mb);
+               if (mb->stmt[i])
+                       freeInstruction(mb, mb->stmt[i]);
                mb->stmt[i] = NULL;
        }
 #if 0
@@ -260,7 +260,7 @@ freeMalBlk(MalBlkPtr mb)
        /*
        for (i = 0; i < mb->ssize; i++)
                if (mb->stmt[i]) {
-                       freeInstruction(mb->stmt[i]);
+                       freeInstruction(mb, mb->stmt[i]);
                        mb->stmt[i] = NULL;
                }
        mb->stop = 0;
@@ -369,7 +369,7 @@ copyMalBlk(MalBlkPtr old)
   bailout:
        /*
        for (i = 0; i < old->stop; i++)
-               freeInstruction(mb->stmt[i]);
+               freeInstruction(mb, mb->stmt[i]);
                */
        for (i = 0; i < old->vtop; i++) {
                /*
@@ -476,26 +476,10 @@ clrInstruction(InstrPtr p)
 }
 
 void
-freeInstruction(InstrPtr p)
+freeInstruction(MalBlkPtr mb, InstrPtr p)
 {
-       if (p && p->blk && p->blk->ma) {
-               // size_t sz = (p->maxarg - 1)*(sizeof(p->argv[0])) + 
(sizeof(InstrRecord));
-               // only free default size
-               if (p->maxarg == 8)
-                       sa_free(p->blk->ma, p);
-       }
-       //GDKfree(p);
-}
-
-void
-freeInstructionX(InstrPtr p, MalBlkPtr mb)
-{
-       if (p && mb && mb->ma) {
-               // size_t sz = (p->maxarg - 1)*(sizeof(p->argv[0])) + 
(sizeof(InstrRecord));
-               // only free default size
-               if (p->maxarg == 8)
-                       sa_free(mb->ma, p);
-       }
+       assert(p && mb && mb->ma);
+       sa_free(mb->ma, p);
 }
 
 
@@ -527,7 +511,7 @@ removeInstructionBlock(MalBlkPtr mb, int
        InstrPtr p;
        for (i = pc; i < pc + cnt; i++) {
                p = getInstrPtr(mb, i);
-               freeInstruction(p);
+               freeInstruction(mb, p);
                mb->stmt[i] = NULL;
        } for (i = pc; i < mb->stop - cnt; i++)
                mb->stmt[i] = mb->stmt[i + cnt];
@@ -1169,18 +1153,18 @@ pushInstruction(MalBlkPtr mb, InstrPtr p
                        for (i = 1; i < mb->stop; i++) {
                                q = getInstrPtr(mb, i);
                                if (q->token == REMsymbol) {
-                                       freeInstructionX(q, mb);
+                                       freeInstruction(mb, q);
                                        mb->stmt[i] = p;
                                        return;
                                }
                        }
-                       freeInstructionX(getInstrPtr(mb, 0), mb);
+                       freeInstruction(mb, getInstrPtr(mb, 0));
                        mb->stmt[0] = p;
                        return;
                }
        }
        if (mb->stmt[mb->stop])
-               freeInstructionX(mb->stmt[mb->stop], mb);
+               freeInstruction(mb, mb->stmt[mb->stop]);
        p->pc = mb->stop;
        mb->stmt[mb->stop++] = p;
 }
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -151,8 +151,7 @@ mal_export InstrPtr newInstructionArgs(M
 mal_export InstrPtr copyInstruction(MalBlkPtr mb, const InstrRecord *p);
 mal_export InstrPtr copyInstructionArgs(MalBlkPtr mb, const InstrRecord *p, 
int args);
 mal_export void clrInstruction(InstrPtr p);
-mal_export void freeInstruction(InstrPtr p);
-mal_export void freeInstructionX(InstrPtr p, MalBlkPtr mb);
+mal_export void freeInstruction(MalBlkPtr mb, InstrPtr p);
 mal_export void clrFunction(InstrPtr p);
 mal_export Symbol newSymbol(const char *nme, int kind);
 mal_export void freeSymbol(Symbol s);
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
@@ -1729,7 +1729,7 @@ fcnHeader(Client cntxt, int kind)
                ch = currChar(cntxt);
        }
        if (currChar(cntxt) != ')') {
-               freeInstruction(curInstr);
+               freeInstruction(curBlk, curInstr);
                if (cntxt->backup)
                        curBlk = NULL;
                parseError(cntxt, "')' expected\n");
@@ -1799,7 +1799,7 @@ fcnHeader(Client cntxt, int kind)
                        curInstr->argv[i1] = newarg[i1];
                GDKfree(newarg);
                if (currChar(cntxt) != ')') {
-                       freeInstruction(curInstr);
+                       freeInstruction(curBlk, curInstr);
                        if (cntxt->backup)
                                curBlk = NULL;
                        parseError(cntxt, "')' expected\n");
@@ -1810,7 +1810,7 @@ fcnHeader(Client cntxt, int kind)
                setVarType(curBlk, 0, TYPE_void);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to