Changeset: 6cf82ca5816e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6cf82ca5816e
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_utils.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_interpreter.h
sql/server/rel_optimize_sel.c
sql/server/sql_mvc.c
Branch: resource_management
Log Message:
in client thread set temp allocator before running MAL
diffs (161 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
@@ -771,7 +771,7 @@ const char *wsaerror(int);
# monetdb5
str AUTHGeneratePasswordHash(str *res, const char *value);
str AUTHcypherValue(str *ret, const char *value);
-str AUTHdecypherValue(str *ret, const char *value);
+str AUTHdecypherValue(allocator *, str *ret, const char *value);
str AUTHrequireAdmin(Client c);
str AUTHunlockVault(const char *password);
str AUTHverifyPassword(const char *passwd);
@@ -1220,7 +1220,7 @@ const char rpcRef[];
const char rsColumnRef[];
const char rtreeRef[];
str runMAL(Client c, MalBlkPtr mb, MalBlkPtr mbcaller, MalStkPtr env);
-str runMALsequence(allocator *alloc, Client cntxt, MalBlkPtr mb, int startpc,
int stoppc, MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller);
+str runMALsequence(allocator *, Client cntxt, MalBlkPtr mb, int startpc, int
stoppc, MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller);
oid runtimeProfileSetTag(Client cntxt);
const char sampleRef[];
const char selectNotNilRef[];
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2381,7 +2381,6 @@ allocator *sa_reset(allocator *sa)
sa->blk_size = SA_BLOCK_SIZE;
sa->objects = 0;
sa->inuse = 0;
- sa->tmp_used = 0;
COND_UNLOCK_ALLOCATOR(sa);
return sa;
}
@@ -2443,7 +2442,6 @@ sa_double_num_blks(allocator *sa)
sa->usedmem += bytes;
}
if (tmp) {
- //bool reallocated = sa->blks != (char **)sa->first_blk;
size_t bytes = sizeof(char*) * osz;
memcpy(tmp, sa->blks, bytes);
if (!sa->pa && sa_reallocated(sa)) {
@@ -2715,7 +2713,7 @@ sa_get_eb(allocator *sa)
#define SA_UNPACK_HI(v)\
((uint32_t)((uint64_t)(v) >> 32))
#define SA_UNPACK_LO(v)\
- ((int32_t)((uint64_t)(v) & 0xFFFFFFFFULL))
+ ((uint32_t)((uint64_t)(v) & 0xFFFFFFFFULL))
uint64_t
sa_open(allocator *sa)
@@ -2733,7 +2731,9 @@ sa_close(allocator *sa)
{
assert(sa_tmp_active(sa));
sa_reset(sa);
- sa->tmp_used = 0;
+ COND_LOCK_ALLOCATOR(sa);
+ sa->tmp_used -= 1;
+ COND_UNLOCK_ALLOCATOR(sa);
}
void
@@ -2742,16 +2742,18 @@ sa_close_to(allocator *sa, uint64_t offs
assert(sa_tmp_active(sa));
assert(offset);
if (offset && !sa_reallocated(sa)) {
- size_t blk_idx = SA_UNPACK_HI(offset);
- size_t blk_offset = SA_UNPACK_LO(offset);
+ uint32_t blk_idx = SA_UNPACK_HI(offset);
+ uint32_t blk_offset = SA_UNPACK_LO(offset);
assert((blk_idx > 0) && (blk_idx <= sa->nr));
- assert(blk_offset > 0 && blk_offset < SA_BLOCK_SIZE);
- _sa_free_blks(sa, blk_idx);
- COND_LOCK_ALLOCATOR(sa);
- sa->nr = blk_idx;
- sa->used = blk_offset;
- sa->freelist = NULL;
- COND_UNLOCK_ALLOCATOR(sa);
+ assert(blk_offset < SA_BLOCK_SIZE);
+ if (blk_idx != sa->nr || blk_offset != sa->used) {
+ _sa_free_blks(sa, blk_idx);
+ COND_LOCK_ALLOCATOR(sa);
+ sa->nr = blk_idx;
+ sa->used = blk_offset;
+ sa->freelist = NULL;
+ COND_UNLOCK_ALLOCATOR(sa);
+ }
}
if (sa->tmp_used > 0) {
COND_LOCK_ALLOCATOR(sa);
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -366,7 +366,14 @@ runMAL(Client cntxt, MalBlkPtr mb, MalBl
* been observed due the small size of the function).
*/
}
- ret = runMALsequence(mb->ma, cntxt, mb, 1, 0, stk, env, 0);
+ allocator *tlsma = MT_thread_getallocator();
+ MT_thread_setallocator(mb->ta);
+ uint64_t offset = ma_open(mb->ta);
+ ret = runMALsequence(mb->ta, cntxt, mb, 1, 0, stk, env, 0);
+ if (ret)
+ ret = MA_STRDUP(mb->ma, ret);
+ ma_close_to(mb->ta, offset);
+ MT_thread_setallocator(tlsma);
if (!stk->keepAlive && garbageControl(getInstrPtr(mb, 0)))
garbageCollector(cntxt, mb, stk, env != stk);
@@ -403,7 +410,14 @@ reenterMAL(Client cntxt, MalBlkPtr mb, i
if (stk == NULL)
throw(MAL, "mal.interpreter", MAL_STACK_FAIL);
keepAlive = stk->keepAlive;
- ret = runMALsequence(mb->ma, cntxt, mb, startpc, stoppc, stk, 0, 0);
+ allocator *tlsma = MT_thread_getallocator();
+ MT_thread_setallocator(mb->ta);
+ uint64_t offset = ma_open(mb->ta);
+ ret = runMALsequence(mb->ta, cntxt, mb, startpc, stoppc, stk, 0, 0);
+ if (ret)
+ ret = MA_STRDUP(mb->ta, ret);
+ ma_close_to(mb->ta, offset);
+ MT_thread_setallocator(tlsma);
if (keepAlive == 0 && garbageControl(getInstrPtr(mb, 0)))
garbageCollector(cntxt, mb, stk, stk != 0);
diff --git a/monetdb5/mal/mal_interpreter.h b/monetdb5/mal/mal_interpreter.h
--- a/monetdb5/mal/mal_interpreter.h
+++ b/monetdb5/mal/mal_interpreter.h
@@ -29,7 +29,7 @@
mal_export MalStkPtr prepareMALstack(allocator *pa, MalBlkPtr mb, int size);
mal_export str runMAL(Client c, MalBlkPtr mb, MalBlkPtr mbcaller,
MalStkPtr env);
-mal_export str runMALsequence(allocator *alloc, Client cntxt, MalBlkPtr mb,
int startpc,
+mal_export str runMALsequence(allocator *, Client cntxt, MalBlkPtr mb, int
startpc,
int stoppc, MalStkPtr
stk, MalStkPtr env,
InstrPtr pcicaller);
mal_export str reenterMAL(Client cntxt, MalBlkPtr mb, int startpc, int stoppc,
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -1128,8 +1128,9 @@ static sql_rel *
rel_optimize_select_and_joins_bottomup(visitor *v, global_props *gp, sql_rel
*rel)
{
v->data = &gp->opt_cycle;
+ sa_open(v->sql->ta);
rel = rel_visitor_bottomup(v, rel,
&rel_optimize_select_and_joins_bottomup_);
- sa_reset(v->sql->ta);
+ sa_close(v->sql->ta);
v->data = gp;
return rel;
}
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -770,7 +770,7 @@ mvc_create(sql_store *store, allocator *
}
m->pa = pa;
m->sa = NULL;
- m->ta = sa_create(m->pa);
+ m->ta = create_allocator(m->pa, "TA_mvc", false);
#ifdef __has_builtin
#if __has_builtin(__builtin_frame_address)
m->sp = (uintptr_t) __builtin_frame_address(0);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]