Changeset: e442f51195b5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e442f51195b5 Modified Files: monetdb5/mal/mal_debugger.c monetdb5/mal/mal_interpreter.c monetdb5/modules/mal/mdb.c Branch: Sep2022 Log Message:
Avoid data race by moving instruction counter of calling instruction to called stack (instead of calling stack). diffs (60 lines): diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c --- a/monetdb5/mal/mal_debugger.c +++ b/monetdb5/mal/mal_debugger.c @@ -200,7 +200,7 @@ mdbBacktrace(Client cntxt, MalStkPtr stk for (; stk != NULL; stk = stk->up) { printCall(cntxt, stk->blk, stk, pci); if (stk->up) - pci = stk->up->pcup; + pci = stk->pcup; } } 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 @@ -764,12 +764,12 @@ runMALsequence(Client cntxt, MalBlkPtr m InstrPtr q; int ii, arg; - stk->pcup = stkpc; nstk = prepareMALstack(pci->blk, pci->blk->vsize); if (nstk == 0){ ret= createException(MAL,"mal.interpreter",MAL_STACK_FAIL); break; } + nstk->pcup = stkpc; /*safeguardStack*/ nstk->stkdepth = nstk->stksize + stk->stkdepth; diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c --- a/monetdb5/modules/mal/mdb.c +++ b/monetdb5/modules/mal/mdb.c @@ -474,6 +474,7 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M bat *ret2 = getArgReference_bat(s, p, 1); int k = 0; size_t len,l; + int pcup; b = COLnew(0, TYPE_int, 256, TRANSIENT); if ( b== NULL) @@ -510,8 +511,8 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M } GDKfree(msg); - for (s = s->up, k++; s != NULL; s = s->up, k++) { - if ((msg = instruction2str(s->blk, s, getInstrPtr(s->blk, s->pcup), LIST_MAL_DEBUG)) == NULL){ + for (pcup = s->pcup, s = s->up, k++; s != NULL; pcup = s->pcup, s = s->up, k++) { + if ((msg = instruction2str(s->blk, s, getInstrPtr(s->blk, pcup), LIST_MAL_DEBUG)) == NULL){ BBPunfix(b->batCacheid); BBPunfix(bn->batCacheid); throw(MAL,"mdb.setTrace", SQLSTATE(HY013) MAL_MALLOC_FAIL); @@ -530,7 +531,7 @@ MDBStkTrace(Client cntxt, MalBlkPtr m, M } snprintf(buf,len+1024,"%s at %s.%s[%d]", msg, getModuleId(getInstrPtr(s->blk,0)), - getFunctionId(getInstrPtr(s->blk,0)), s->pcup); + getFunctionId(getInstrPtr(s->blk,0)), pcup); if (BUNappend(b, &k, false) != GDK_SUCCEED || BUNappend(bn, buf, false) != GDK_SUCCEED) { GDKfree(buf); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org