Changeset: 5d4b6752344c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5d4b6752344c
Modified Files:
        monetdb5/mal/mal_factory.c
        monetdb5/modules/mal/tokenizer.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
Branch: default
Log Message:

Don't count certain bats against a particular client context.
The tokenizer uses global transient bats, as do MAL factories.  Also, in
SQL there are transients that are shared among all contexts.


diffs (168 lines):

diff --git a/monetdb5/mal/mal_factory.c b/monetdb5/mal/mal_factory.c
--- a/monetdb5/mal/mal_factory.c
+++ b/monetdb5/mal/mal_factory.c
@@ -122,6 +122,8 @@ runFactory(Client cntxt, MalBlkPtr mb, M
        }
        if (mb->errors)
                throw(MAL, "factory.call", PROGRAM_GENERAL);
+       QryCtx *qc = MT_thread_get_qry_ctx();
+       MT_thread_set_qry_ctx(NULL);
        if (firstcall ){
                /* initialize the stack */
                for(i= psig->argc; i< mb->vtop; i++) {
@@ -144,6 +146,7 @@ runFactory(Client cntxt, MalBlkPtr mb, M
         } else {
                msg = reenterMAL(cntxt, mb, pl->pc, -1, pl->stk);
        }
+       MT_thread_set_qry_ctx(qc);
        /* propagate change in debugging status */
        if (cmd && pl->stk && pl->stk->cmd != cmd && cmd != 'x')
                for (; stk; stk = stk->up)
diff --git a/monetdb5/modules/mal/tokenizer.c b/monetdb5/modules/mal/tokenizer.c
--- a/monetdb5/modules/mal/tokenizer.c
+++ b/monetdb5/modules/mal/tokenizer.c
@@ -124,7 +124,7 @@ TKNZRopen(void *ret, str *in)
        }
        tokenDepth = 0;
 
-       TRANS = COLnew(0, TYPE_str, MAX_TKNZR_DEPTH + 1, TRANSIENT);
+       TRANS = COLnew(0, TYPE_str, MAX_TKNZR_DEPTH + 1, SYSTRANS);
        if (TRANS == NULL) {
                MT_lock_unset(&mal_contextLock);
                throw(MAL, "tokenizer.open", SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -474,7 +474,7 @@ new_segments(sql_trans *tr, size_t cnt)
 static int
 temp_dup_cs(column_storage *cs, ulng tid, int type)
 {
-       BAT *b = bat_new(type, 1024, TRANSIENT);
+       BAT *b = bat_new(type, 1024, SYSTRANS);
        if (!b)
                return LOG_ERR;
        bat_set_access(b, BAT_READ);
@@ -838,8 +838,8 @@ merge_updates( BAT *ui, BAT **UV, BAT *o
        int err = 0;
        BAT *uv = *UV;
        BUN cnt = BATcount(ui)+BATcount(oi);
-       BAT *ni = bat_new(TYPE_oid, cnt, TRANSIENT);
-       BAT *nv = uv?bat_new(uv->ttype, cnt, TRANSIENT):NULL;
+       BAT *ni = bat_new(TYPE_oid, cnt, SYSTRANS);
+       BAT *nv = uv?bat_new(uv->ttype, cnt, SYSTRANS):NULL;
 
        if (!ni || (uv && !nv)) {
                bat_destroy(ni);
@@ -1244,7 +1244,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                }
                                if (cs->ucnt) {
                                        BAT *ui = NULL, *uv = NULL;
-                                       BAT *nb = COLcopy(b, b->ttype, true, 
TRANSIENT);
+                                       BAT *nb = COLcopy(b, b->ttype, true, 
SYSTRANS);
                                        bat_destroy(b);
                                        if (!nb || cs_real_update_bats(cs, &ui, 
&uv) != LOG_OK) {
                                                bat_destroy(nb);
@@ -1351,7 +1351,7 @@ for_append_bat(column_storage *cs, BAT *
                if (!newoffsets) { /* decompress */
                        if (cs->ucnt) {
                                BAT *ui = NULL, *uv = NULL;
-                               BAT *nb = COLcopy(b, b->ttype, true, TRANSIENT);
+                               BAT *nb = COLcopy(b, b->ttype, true, SYSTRANS);
                                bat_destroy(b);
                                if (!nb || cs_real_update_bats(cs, &ui, &uv) != 
LOG_OK) {
                                        bat_destroy(nb);
@@ -1418,7 +1418,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                        return LOG_ERR;
                }
        } else if (updates && updates->ttype == TYPE_void && 
!complex_cand(updates)) { /* dense later use optimized log structure */
-               updates = COLcopy(updates, TYPE_oid, true /* make sure we get a 
oid col */, TRANSIENT);
+               updates = COLcopy(updates, TYPE_oid, true /* make sure we get a 
oid col */, SYSTRANS);
                if (!updates) {
                        if (otids != tids)
                                bat_destroy(tids);
@@ -1499,7 +1499,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        BUN lend = end < seg->end?end:seg->end;
                                        if (seg->ts == tr->tid && 
!seg->deleted) {
                                                if (!ins) {
-                                                       ins = COLnew(0, 
TYPE_msk, ucnt, TRANSIENT);
+                                                       ins = COLnew(0, 
TYPE_msk, ucnt, SYSTRANS);
                                                        if (!ins)
                                                                res = LOG_ERR;
                                                        else {
@@ -1543,7 +1543,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        /* check for inplace updates */
                                        if (seg->ts == tr->tid && 
!seg->deleted) {
                                                if (!ins) {
-                                                       ins = COLnew(0, 
TYPE_msk, ucnt, TRANSIENT);
+                                                       ins = COLnew(0, 
TYPE_msk, ucnt, SYSTRANS);
                                                        if (!ins) {
                                                                res = LOG_ERR;
                                                                break;
@@ -1583,7 +1583,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        /* check for inplace updates */
                                        if (seg->ts == tr->tid && 
!seg->deleted) {
                                                if (!ins) {
-                                                       ins = COLnew(0, 
TYPE_msk, ucnt, TRANSIENT);
+                                                       ins = COLnew(0, 
TYPE_msk, ucnt, SYSTRANS);
                                                        if (!ins) {
                                                                res = LOG_ERR;
                                                                break;
@@ -1639,8 +1639,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
 
                                if (res == LOG_OK) {
                                        const void *upd = NULL;
-                                       nui = bat_new(TYPE_oid, cs->ucnt + ucnt 
- cnt, TRANSIENT);
-                                       nuv = bat_new(uv->ttype, cs->ucnt + 
ucnt - cnt, TRANSIENT);
+                                       nui = bat_new(TYPE_oid, cs->ucnt + ucnt 
- cnt, SYSTRANS);
+                                       nuv = bat_new(uv->ttype, cs->ucnt + 
ucnt - cnt, SYSTRANS);
 
                                        if (!nui || !nuv) {
                                                res = LOG_ERR;
@@ -4555,7 +4555,7 @@ add_offsets(BUN slot, size_t nr, size_t 
                return LOG_OK;
        }
        if (!*offsets) {
-               *offsets = COLnew(0, TYPE_oid, total, TRANSIENT);
+               *offsets = COLnew(0, TYPE_oid, total, SYSTRANS);
                if (!*offsets)
                        return LOG_ERR;
        }
@@ -4812,7 +4812,7 @@ segments2cands(storage *S, sql_trans *tr
                return BATdense(start, start, end-start);
        }
 
-       BAT *b = COLnew(0, TYPE_msk, nr, TRANSIENT), *bn = NULL;
+       BAT *b = COLnew(0, TYPE_msk, nr, SYSTRANS), *bn = NULL;
        if (!b) {
                unlock_table(tr->store, t->base.id);
                return NULL;
diff --git a/sql/storage/bat/bat_utils.c b/sql/storage/bat/bat_utils.c
--- a/sql/storage/bat/bat_utils.c
+++ b/sql/storage/bat/bat_utils.c
@@ -109,7 +109,7 @@ log_bid
 e_bat(int type)
 {
        if (ebats[type] == NULL &&
-           (ebats[type] = bat_new(type, 0, TRANSIENT)) == NULL)
+           (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
                return BID_NIL;
        return temp_create(ebats[type]);
 }
@@ -118,7 +118,7 @@ BAT *
 e_BAT(int type)
 {
        if (ebats[type] == NULL &&
-           (ebats[type] = bat_new(type, 0, TRANSIENT)) == NULL)
+           (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
                return NULL;
        return temp_descriptor(ebats[type]->batCacheid);
 }
@@ -131,7 +131,7 @@ bat_utils_init(void)
 
        for (t=1; t<GDKatomcnt; t++) {
                if (t != TYPE_bat && BATatoms[t].name[0]) {
-                       ebats[t] = bat_new(t, 0, TRANSIENT);
+                       ebats[t] = bat_new(t, 0, SYSTRANS);
                        if(ebats[t] == NULL) {
                                for (t = t - 1; t >= 1; t--)
                                        bat_destroy(ebats[t]);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to