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

Spin without locking, make sure status bits reflect current situation.


diffs (67 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1979,12 +1979,13 @@ BBPcacheit(BAT *bn, bool lock)
        if (lock)
                MT_lock_set(&GDKswapLock(i));
        mode = (BBP_status(i) | BBPLOADED) & ~(BBPLOADING | BBPDELETING | 
BBPSWAPPED);
-       BBP_status_set(i, mode);
        BBP_desc(i) = bn;
 
        /* cache it! */
        BBP_cache(i) = bn;
 
+       BBP_status_set(i, mode);
+
        if (lock)
                MT_lock_unset(&GDKswapLock(i));
        return GDK_SUCCEED;
@@ -2010,10 +2011,10 @@ BBPuncacheit(bat i, bool unloaddesc)
                        if (BBP_cache(i)) {
                                TRC_DEBUG(BAT_, "uncache %d (%s)\n", (int) i, 
BBP_logical(i));
 
-                               BBP_cache(i) = NULL;
-
                                /* clearing bits can be done without the lock */
                                BBP_status_off(i, BBPLOADED);
+
+                               BBP_cache(i) = NULL;
                        }
                        if (unloaddesc) {
                                BBP_desc(i) = NULL;
@@ -2248,7 +2249,7 @@ incref(bat i, bool logical, bool lock)
                                break;
                        /* the BATs is "unstable", try again */
                        MT_lock_unset(&GDKswapLock(i));
-                       MT_sleep_ms(KITTENNAP);
+                       BBPspin(i, __func__, BBPUNSTABLE|BBPLOADING);
                }
        }
        /* we have the lock */
@@ -2564,7 +2565,7 @@ getBBPdescriptor(bat i, bool lock)
                while (BBP_status(i) & BBPWAITING) {    /* wait for bat to be 
loaded by other thread */
                        if (lock)
                                MT_lock_unset(&GDKswapLock(i));
-                       MT_sleep_ms(KITTENNAP);
+                       BBPspin(i, __func__, BBPWAITING);
                        if (lock)
                                MT_lock_set(&GDKswapLock(i));
                }
@@ -2628,7 +2629,7 @@ BBPsave(BAT *b)
                /* wait until save in other thread completes */
                if (lock)
                        MT_lock_unset(&GDKswapLock(bid));
-               BBPspin(bid, "BBPsave", BBPSAVING);
+               BBPspin(bid, __func__, BBPSAVING);
        } else {
                /* save it */
                unsigned flags = BBPSAVING;
@@ -2781,7 +2782,7 @@ dirty_bat(bat *i, bool subcommit)
 {
        if (BBPvalid(*i)) {
                BAT *b;
-               BBPspin(*i, "dirty_bat", BBPSAVING);
+               BBPspin(*i, __func__, BBPSAVING);
                b = BBP_cache(*i);
                if (b != NULL) {
                        if ((BBP_status(*i) & BBPNEW) &&
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to