Changeset: 221eed9afe12 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/221eed9afe12
Modified Files:
        gdk/gdk.h
        gdk/gdk_bbp.c
        gdk/gdk_logger.c
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_interpreter.c
        sql/storage/bat/bat_utils.h
Branch: Jul2021
Log Message:

Fix some data races.


diffs (81 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1154,7 +1154,7 @@ typedef var_t stridx_t;
 #define BUNtloc(bi,p)  (assert((bi).type != TYPE_msk), ((void *) ((char *) 
(bi).base + ((p) << (bi).shift))))
 #define BUNtpos(bi,p)  Tpos(&(bi),p)
 #define BUNtvar(bi,p)  (assert((bi).type && (bi).b->tvarsized), (void *) 
((bi).vh->base+BUNtvaroff(bi,p)))
-#define BUNtail(bi,p)  
((bi).type?(bi).b->tvarsized?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
+#define BUNtail(bi,p)  
((bi).type?(bi).vh?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
 
 #define BUNlast(b)     (assert((b)->batCount <= BUN_MAX), (b)->batCount)
 
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2218,7 +2218,7 @@ BBPinsert(BAT *bn)
        MT_lock_unset(&GDKswapLock(i));
 
 #ifdef HAVE_HGE
-       if (bn->ttype == TYPE_hge)
+       if (bn->ttype == TYPE_hge && !havehge)
                havehge = true;
 #endif
 
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2451,7 +2451,7 @@ string_writer(logger *lg, BAT *b, lng of
                }
                char *dst = buf;
                for(; p < end && sz < bufsz; p++) {
-                       char *s = BUNtail(bi, p);
+                       char *s = BUNtvar(bi, p);
                        size_t len = strlen(s)+1;
                        if ((sz+len) > bufsz) {
                                if (len > bufsz)
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -515,9 +515,11 @@ MCactiveClients(void)
        int active = 0;
        Client cntxt = mal_clients;
 
+       MT_lock_set(&mal_contextLock);
        for(cntxt = mal_clients;  cntxt<mal_clients+MAL_MAXCLIENTS; cntxt++){
                active += (cntxt->idle == 0 && cntxt->mode == RUNCLIENT);
        }
+       MT_lock_unset(&mal_contextLock);
        return active;
 }
 
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
@@ -875,9 +875,11 @@ str runMALsequence(Client cntxt, MalBlkP
 
                                                if (garbage[i] >= 0) {
                                                        bid = 
stk->stk[garbage[i]].val.bval;
-                                                       
stk->stk[garbage[i]].val.bval = bat_nil;
-                                                       BBPcold(bid);
-                                                       BBPrelease(bid);
+                                                       if (!is_bat_nil(bid)) {
+                                                               
stk->stk[garbage[i]].val.bval = bat_nil;
+                                                               BBPcold(bid);
+                                                               BBPrelease(bid);
+                                                       }
                                                }
                                        }
                                }
diff --git a/sql/storage/bat/bat_utils.h b/sql/storage/bat/bat_utils.h
--- a/sql/storage/bat/bat_utils.h
+++ b/sql/storage/bat/bat_utils.h
@@ -15,7 +15,7 @@
 /* when returning a log_bid, errors are reported using BID_NIL */
 #define BID_NIL 0
 
-#define bat_set_access(b,access) b->batRestricted = access
+#define bat_set_access(b,access) do { if (b->batRestricted != access) 
b->batRestricted = access; } while (0)
 
 extern BAT *temp_descriptor(log_bid b);
 extern BAT *quick_descriptor(log_bid b);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to