Changeset: 5b010dcd16a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5b010dcd16a7
Modified Files:
        gdk/gdk_bat.c
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/mal/orderidx.c
        sql/backends/monet5/sql.c
        sql/storage/store.c
        tools/monetdbe/monetdbe.c
Branch: default
Log Message:

Fix some data races.


diffs (101 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1023,7 +1023,6 @@ BUNappendmulti(BAT *b, const void *value
        }
 
        ALIGNapp(b, force, GDK_FAIL);
-       b->batDirtydesc = true;
 
        if (b->ttype == TYPE_void && BATtdense(b)) {
                const oid *ovals = values;
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -846,7 +846,7 @@ runMALdataflow(Client cntxt, MalBlkPtr m
                        /* doing a recursive call: copy specificity from
                         * current worker to new worker */
                        for (int j = 0; j < THREADS; j++) {
-                               if (workers[j].flag == RUNNING && workers[j].id 
== pid) {
+                               if (workers[j].id == pid && workers[j].flag == 
RUNNING) {
                                        ATOMIC_PTR_SET(&workers[i].cntxt,
                                                                   
ATOMIC_PTR_GET(&workers[j].cntxt));
                                        break;
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
@@ -332,6 +332,7 @@ str runMAL(Client cntxt, MalBlkPtr mb, M
        }
        if (stk->cmd && env && stk->cmd != 'f')
                stk->cmd = env->cmd;
+       mb->starttime = GDKusec();
        ret = runMALsequence(cntxt, mb, 1, 0, stk, env, 0);
 
        /* pass the new debug mode to the caller */
@@ -422,6 +423,7 @@ callMAL(Client cntxt, MalBlkPtr mb, MalS
                                BBPretain(lhs->val.bval);
                }
                stk->cmd = debug;
+               mb->starttime = GDKusec();
                ret = runMALsequence(cntxt, mb, 1, 0, stk, 0, 0);
                break;
        case FACTORYsymbol:
@@ -503,7 +505,6 @@ str runMALsequence(Client cntxt, MalBlkP
                startedProfileQueue = 1;
                runtimeProfileInit(cntxt, mb, stk);
                runtimeProfileBegin(cntxt, mb, stk, getInstrPtr(mb,0), 
&runtimeProfileFunction);
-               mb->starttime = GDKusec();
                if (cntxt->sessiontimeout && mb->starttime - cntxt->session > 
cntxt->sessiontimeout) {
                        runtimeProfileFinish(cntxt, mb, stk);
                        if ( backup != backups) GDKfree(backup);
diff --git a/monetdb5/modules/mal/orderidx.c b/monetdb5/modules/mal/orderidx.c
--- a/monetdb5/modules/mal/orderidx.c
+++ b/monetdb5/modules/mal/orderidx.c
@@ -223,6 +223,7 @@ OIDXcreateImplementation(Client cntxt, i
        newstk->stk[arg].vtype= TYPE_bat;
        newstk->stk[arg].val.bval= b->batCacheid;
        BBPretain(newstk->stk[arg].val.bval);
+       smb->starttime = GDKusec();
        msg = runMALsequence(cntxt, smb, 1, 0, newstk, 0, 0);
        freeStack(newstk);
        /* get rid of temporary MAL block */
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4644,6 +4644,7 @@ SQLunionfunc(Client cntxt, MalBlkPtr mb,
 
        if (!nmb)
                return createException(MAL, "sql.unionfunc", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+       nmb->starttime = mb->starttime;
        mod = *getArgReference_str(stk, pci, arg++);
        fcn = *getArgReference_str(stk, pci, arg++);
        npci = newStmtArgs(nmb, mod, fcn, pci->argc);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2353,9 +2353,13 @@ store_manager(sqlstore *store)
                MT_lock_unset(&store->flush);
                MT_sleep_ms(sleeptime);
                flusher.countdown_ms -= sleeptime;
+               MT_lock_set(&store->commit);
                MT_lock_set(&store->flush);
-               if (store->logger_api.changes(store) <= 0)
+               if (store->logger_api.changes(store) <= 0) {
+                       MT_lock_unset(&store->commit);
                        continue;
+               }
+               MT_lock_unset(&store->commit);
                if (GDKexiting())
                        break;
 
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -854,6 +854,7 @@ monetdbe_open_remote(monetdbe_database_i
                return -2;
        }
        stk->keepAlive = TRUE;
+       mb->starttime = GDKusec();
        if ( (mdbe->msg = runMALsequence(c, mb, 1, 0, stk, 0, 0)) != 
MAL_SUCCEED ) {
                freeStack(stk);
                freeSymbol(c->curprg);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to