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