Changeset: 626fb8b0daa2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/626fb8b0daa2
Modified Files:
gdk/gdk_bbp.c
Branch: Sep2022
Log Message:
Use an external lock to potentially synchronize with external programs.
diffs (42 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -265,18 +265,37 @@ 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 */
+/* GDKtmLock protects all accesses and changes to BAKDIR and SUBDIR
+ * must use BBPtmlock()/BBPtmunlock() to set/unset the lock */
static MT_Lock GDKtmLock = MT_LOCK_INITIALIZER(GDKtmLock);
+static char *lockfile;
+static int lockfd;
void
BBPtmlock(void)
{
MT_lock_set(&GDKtmLock);
+ if (GDKinmemory(0))
+ return;
+ /* also use an external lock file to synchronize with external
+ * programs */
+ if (lockfile == NULL) {
+ lockfile = GDKfilepath(0, NULL, ".tm_lock", NULL);
+ if (lockfile == NULL)
+ return;
+ }
+ lockfd = MT_lockf(lockfile, F_LOCK);
}
void
BBPtmunlock(void)
{
+ if (lockfile && lockfd >= 0) {
+ assert(!GDKinmemory(0));
+ MT_lockf(lockfile, F_ULOCK);
+ close(lockfd);
+ lockfd = -1;
+ }
MT_lock_unset(&GDKtmLock);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]