Changeset: 5f2cd2bb0536 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5f2cd2bb0536
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        gdk/gdk_private.h
        gdk/gdk_tm.c
        gdk/gdk_utils.c
Branch: Sep2022
Log Message:

Exclusively use BBPtmlock()/BBPtmunlock() to lock GDKtmLock.


diffs (199 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2209,7 +2209,7 @@ backup_new(Heap *hp, bool lock)
        if (batpath != NULL && bakpath != NULL) {
                /* file actions here interact with the global commits */
                if (lock)
-                       MT_lock_set(&GDKtmLock);
+                       BBPtmlock();
 
                batret = MT_stat(batpath, &st);
                bakret = MT_stat(bakpath, &st);
@@ -2230,7 +2230,7 @@ backup_new(Heap *hp, bool lock)
                        ret = 0;
                }
                if (lock)
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
        }
        GDKfree(batpath);
        GDKfree(bakpath);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -265,6 +265,9 @@ static volatile MT_Id locked_by = 0;
 static int BBPunloadCnt = 0;
 static MT_Lock GDKunloadLock = MT_LOCK_INITIALIZER(GDKunloadLock);
 
+/* GDKtmLock protects all accesses and changes to BAKDIR and SUBDIR */
+static MT_Lock GDKtmLock = MT_LOCK_INITIALIZER(GDKtmLock);
+
 void
 BBPtmlock(void)
 {
@@ -290,7 +293,7 @@ BBPlock(void)
                MT_lock_set(&GDKunloadLock);
        }
 
-       MT_lock_set(&GDKtmLock);
+       BBPtmlock();
        MT_lock_set(&GDKcacheLock);
        for (i = 0; i <= BBP_BATMASK; i++)
                MT_lock_set(&GDKswapLock(i));
@@ -308,7 +311,7 @@ BBPunlock(void)
                MT_lock_unset(&GDKswapLock(i));
        MT_lock_unset(&GDKcacheLock);
        locked_by = 0;
-       MT_lock_unset(&GDKtmLock);
+       BBPtmunlock();
 }
 
 static gdk_return
@@ -1546,11 +1549,11 @@ BBPinit(void)
        if (!GDKinmemory(0)) {
                str bbpdirstr, backupbbpdirstr;
 
-               MT_lock_set(&GDKtmLock);
+               BBPtmlock();
 
                if (!(bbpdirstr = GDKfilepath(0, BATDIR, "BBP", "dir"))) {
                        TRC_CRITICAL(GDK, "GDKmalloc failed\n");
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
                        GDKdebug = dbg;
                        return GDK_FAIL;
                }
@@ -1558,7 +1561,7 @@ BBPinit(void)
                if (!(backupbbpdirstr = GDKfilepath(0, BAKDIR, "BBP", "dir"))) {
                        GDKfree(bbpdirstr);
                        TRC_CRITICAL(GDK, "GDKmalloc failed\n");
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
                        GDKdebug = dbg;
                        return GDK_FAIL;
                }
@@ -1567,7 +1570,7 @@ BBPinit(void)
                        GDKfree(bbpdirstr);
                        GDKfree(backupbbpdirstr);
                        TRC_CRITICAL(GDK, "cannot remove directory %s\n", 
TEMPDIR);
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
                        GDKdebug = dbg;
                        return GDK_FAIL;
                }
@@ -1576,7 +1579,7 @@ BBPinit(void)
                        GDKfree(bbpdirstr);
                        GDKfree(backupbbpdirstr);
                        TRC_CRITICAL(GDK, "cannot remove directory %s\n", 
DELDIR);
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
                        GDKdebug = dbg;
                        return GDK_FAIL;
                }
@@ -1586,7 +1589,7 @@ BBPinit(void)
                        GDKfree(bbpdirstr);
                        GDKfree(backupbbpdirstr);
                        TRC_CRITICAL(GDK, "cannot properly recover_subdir 
process %s.", SUBDIR);
-                       MT_lock_unset(&GDKtmLock);
+                       BBPtmunlock();
                        GDKdebug = dbg;
                        return GDK_FAIL;
                }
@@ -1597,14 +1600,14 @@ BBPinit(void)
                        if (recover_dir(0, MT_stat(bbpdirstr, &st) == 0) != 
GDK_SUCCEED) {
                                GDKfree(bbpdirstr);
                                GDKfree(backupbbpdirstr);
-                               MT_lock_unset(&GDKtmLock);
+                               BBPtmunlock();
                                goto bailout;
                        }
                        if ((fp = GDKfilelocate(0, "BBP", "r", "dir")) == NULL) 
{
                                GDKfree(bbpdirstr);
                                GDKfree(backupbbpdirstr);
                                TRC_CRITICAL(GDK, "cannot open recovered 
BBP.dir.");
-                               MT_lock_unset(&GDKtmLock);
+                               BBPtmunlock();
                                GDKdebug = dbg;
                                return GDK_FAIL;
                        }
@@ -1618,7 +1621,7 @@ BBPinit(void)
                                if (BBPdir_init() != GDK_SUCCEED) {
                                        GDKfree(bbpdirstr);
                                        GDKfree(backupbbpdirstr);
-                                       MT_lock_unset(&GDKtmLock);
+                                       BBPtmunlock();
                                        goto bailout;
                                }
                        } else if (GDKmove(0, BATDIR, "BBP", "bak", BATDIR, 
"BBP", "dir", true) == GDK_SUCCEED)
@@ -1628,14 +1631,14 @@ BBPinit(void)
                                GDKsyserror("cannot open BBP.dir");
                                GDKfree(bbpdirstr);
                                GDKfree(backupbbpdirstr);
-                               MT_lock_unset(&GDKtmLock);
+                               BBPtmunlock();
                                goto bailout;
                        }
                }
                assert(fp != NULL);
                GDKfree(bbpdirstr);
                GDKfree(backupbbpdirstr);
-               MT_lock_unset(&GDKtmLock);
+               BBPtmunlock();
        }
 
        /* scan the BBP.dir to obtain current size */
@@ -1692,9 +1695,9 @@ BBPinit(void)
 
        /* will call BBPrecover if needed */
        if (!GDKinmemory(0)) {
-               MT_lock_set(&GDKtmLock);
+               BBPtmlock();
                gdk_return rc = BBPprepare(false);
-               MT_lock_unset(&GDKtmLock);
+               BBPtmunlock();
                if (rc != GDK_SUCCEED) {
 #ifdef GDKLIBRARY_HASHASH
                        GDKfree(hashbats);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -473,7 +473,6 @@ extern batlock_t GDKbatLock[BBP_BATMASK 
 extern size_t GDK_mmap_minsize_persistent; /* size after which we use memory 
mapped files for persistent heaps */
 extern size_t GDK_mmap_minsize_transient; /* size after which we use memory 
mapped files for transient heaps */
 extern size_t GDK_mmap_pagesize; /* mmap granularity */
-extern MT_Lock GDKtmLock;
 
 #define BATcheck(tst, err)                             \
        do {                                            \
diff --git a/gdk/gdk_tm.c b/gdk/gdk_tm.c
--- a/gdk/gdk_tm.c
+++ b/gdk/gdk_tm.c
@@ -187,12 +187,12 @@ TMsubcommit_list(bat *restrict subcommit
                }
        }
        /* lock just prevents other global (sub-)commits */
-       MT_lock_set(&GDKtmLock);
+       BBPtmlock();
        if (BBPsync(cnt, subcommit, sizes, logno, transid) == GDK_SUCCEED) { /* 
write BBP.dir (++) */
                epilogue(cnt, subcommit, false);
                ret = GDK_SUCCEED;
        }
-       MT_lock_unset(&GDKtmLock);
+       BBPtmunlock();
        return ret;
 }
 
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1345,9 +1345,6 @@ GDKexit(int status)
 
 batlock_t GDKbatLock[BBP_BATMASK + 1];
 
-/* GDKtmLock protects all accesses and changes to BAKDIR and SUBDIR */
-MT_Lock GDKtmLock = MT_LOCK_INITIALIZER(GDKtmLock);
-
 /*
  * @+ Concurrency control
  * Concurrency control requires actions at several levels of the
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to