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 -- [email protected]
To unsubscribe send an email to [email protected]