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

Reply via email to