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 -- [email protected]
To unsubscribe send an email to [email protected]