Changeset: 05ffcb2aaef7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/05ffcb2aaef7
Modified Files:
        gdk/gdk_bbp.c
Branch: Jul2021
Log Message:

Reduce data races.


diffs (50 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1112,16 +1112,19 @@ BBPtrim(bool aggressive)
                MT_lock_set(&GDKswapLock(bid));
                BAT *b = NULL;
                bool swap = false;
-               if (BBP_refs(bid) == 0 &&
+               if (!(BBP_status(bid) & flag) &&
+                   BBP_refs(bid) == 0 &&
                    BBP_lrefs(bid) != 0 &&
-                   (b = BBP_cache(bid)) != NULL &&
-                   b->batSharecnt == 0 &&
-                   (!BATdirty(b) || (aggressive && b->theap->storage == 
STORE_MMAP && (b->tvheap == NULL || b->tvheap->storage == STORE_MMAP))) &&
-                   !(BBP_status(bid) & flag) /*&&
-                   (BBP_status(bid) & BBPPERSISTENT ||
-                   (b->batRole == PERSISTENT && BBP_lrefs(bid) == 1)) */) {
-                       BBP_status_on(bid, BBPUNLOADING);
-                       swap = true;
+                   (b = BBP_cache(bid)) != NULL) {
+                       MT_lock_set(&b->theaplock);
+                       if (b->batSharecnt == 0 &&
+                           (!BATdirty(b) || (aggressive && b->theap->storage 
== STORE_MMAP && (b->tvheap == NULL || b->tvheap->storage == STORE_MMAP))) /*&&
+                           (BBP_status(bid) & BBPPERSISTENT ||
+                            (b->batRole == PERSISTENT && BBP_lrefs(bid) == 1)) 
*/) {
+                               BBP_status_on(bid, BBPUNLOADING);
+                               swap = true;
+                       }
+                       MT_lock_unset(&b->theaplock);
                }
                MT_lock_unset(&GDKswapLock(bid));
                if (swap) {
@@ -2363,12 +2366,16 @@ bbpclear(bat i, int idx, bool lock)
        TRC_DEBUG(BAT_, "clear %d (%s)\n", (int) i, BBP_logical(i));
        BBPuncacheit(i, true);
        TRC_DEBUG(BAT_, "set to unloading %d\n", i);
-       if (lock)
+       if (lock) {
                MT_lock_set(&GDKcacheLock(idx));
+               MT_lock_set(&GDKswapLock(idx));
+       }
 
        BBP_status_set(i, BBPUNLOADING);
        BBP_refs(i) = 0;
        BBP_lrefs(i) = 0;
+       if (lock)
+               MT_lock_unset(&GDKswapLock(idx));
        if (!BBPtmpcheck(BBP_logical(i))) {
                MT_lock_set(&BBPnameLock);
                BBP_delete(i);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to