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]

Reply via email to