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]