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]