Changeset: 35b2babff9ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=35b2babff9ed
Modified Files:
gdk/gdk_private.h
gdk/gdk_system.h
gdk/gdk_utils.c
Branch: Apr2019
Log Message:
Give GDK locks unique names.
Locks only have names when assertions are on (NDEBUG is undefined).
diffs (127 lines):
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -315,12 +315,21 @@ typedef struct {
MT_Lock swap;
MT_Lock hash;
MT_Lock imprints;
+#ifndef NDEBUG
+ char swapname[16];
+ char hashname[16];
+ char impsname[16];
+#endif
} batlock_t;
typedef struct {
- MT_Lock alloc;
+ MT_Lock cache;
MT_Lock trim;
bat free;
+#ifndef NDEBUG
+ char cachename[16];
+ char trimname[16];
+#endif
} bbplock_t;
typedef char long_str[IDLENGTH]; /* standard GDK static string */
@@ -370,7 +379,7 @@ extern MT_Lock MT_system_lock;
#define threadmask(y) ((int) (mix_int(y) & BBP_THREADMASK))
#endif
#define GDKtrimLock(y) GDKbbpLock[y].trim
-#define GDKcacheLock(y) GDKbbpLock[y].alloc
+#define GDKcacheLock(y) GDKbbpLock[y].cache
#define BBP_free(y) GDKbbpLock[y].free
/* extra space in front of strings in string heaps when hashash is set
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -159,15 +159,24 @@ gdk_export int pthread_mutex_unlock(pthr
typedef struct {
pthread_mutex_t lock;
+#ifndef NDEBUG
const char *name;
+#endif
} MT_Lock;
+#ifdef NDEBUG
+#define MT_lock_init(l, n) pthread_mutex_init(&(l)->lock, 0)
+#define MT_lock_set(l) pthread_mutex_lock(&(l)->lock)
+#define MT_lock_unset(l) pthread_mutex_unlock(&(l)->lock)
+#ifdef PTHREAD_MUTEX_INITIALIZER
+#define MT_LOCK_INITIALIZER(name) = { PTHREAD_MUTEX_INITIALIZER }
+#endif
+#else
#define MT_lock_init(l, n) \
do { \
(l)->name = (n); \
pthread_mutex_init(&(l)->lock, 0); \
} while (0)
-#define MT_lock_destroy(l) pthread_mutex_destroy(&(l)->lock)
#define MT_lock_set(l) \
do { \
TEMDEBUG fprintf(stderr, "#%s: locking %s...\n", \
@@ -182,10 +191,13 @@ typedef struct {
__func__, (l)->name); \
pthread_mutex_unlock(&(l)->lock); \
} while (0)
-
#ifdef PTHREAD_MUTEX_INITIALIZER
#define MT_LOCK_INITIALIZER(name) = { PTHREAD_MUTEX_INITIALIZER, name }
-#else
+#endif
+#endif
+#define MT_lock_destroy(l) pthread_mutex_destroy(&(l)->lock)
+
+#ifndef PTHREAD_MUTEX_INITIALIZER
/* no static initialization possible, so we need dynamic initialization */
#define MT_LOCK_INITIALIZER(name)
#define NEED_MT_LOCK_INIT
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -476,13 +476,29 @@ GDKinit(opt *set, int setlen)
#endif
#endif
for (i = 0; i <= BBP_BATMASK; i++) {
- MT_lock_init(&GDKbatLock[i].swap, "GDKswapLock");
- MT_lock_init(&GDKbatLock[i].hash, "GDKhashLock");
- MT_lock_init(&GDKbatLock[i].imprints, "GDKimprintsLock");
+#ifndef NDEBUG
+ snprintf(GDKbatLock[i].swapname, sizeof(GDKbatLock[i].swapname),
+ "GDKswapLock%d", i);
+ snprintf(GDKbatLock[i].hashname, sizeof(GDKbatLock[i].hashname),
+ "GDKhashLock%d", i);
+ snprintf(GDKbatLock[i].impsname, sizeof(GDKbatLock[i].impsname),
+ "GDKimpsLock%d", i);
+#endif
+ /* MT_lock_init does not use second argument if NDEBUG set */
+ MT_lock_init(&GDKbatLock[i].swap, GDKbatLock[i].swapname);
+ MT_lock_init(&GDKbatLock[i].hash, GDKbatLock[i].hashname);
+ MT_lock_init(&GDKbatLock[i].imprints, GDKbatLock[i].impsname);
}
for (i = 0; i <= BBP_THREADMASK; i++) {
- MT_lock_init(&GDKbbpLock[i].alloc, "GDKcacheLock");
- MT_lock_init(&GDKbbpLock[i].trim, "GDKtrimLock");
+#ifndef NDEBUG
+ snprintf(GDKbbpLock[i].cachename,
sizeof(GDKbbpLock[i].cachename),
+ "GDKcacheLock%d", i);
+ snprintf(GDKbbpLock[i].trimname, sizeof(GDKbbpLock[i].trimname),
+ "GDKtrimLock%d", i);
+#endif
+ /* MT_lock_init does not use second argument if NDEBUG set */
+ MT_lock_init(&GDKbbpLock[i].cache, GDKbbpLock[i].cachename);
+ MT_lock_init(&GDKbbpLock[i].trim, GDKbbpLock[i].trimname);
GDKbbpLock[i].free = 0;
}
errno = 0;
@@ -810,7 +826,7 @@ GDKreset(int status, int doexit)
MT_lock_destroy(&GDKbatLock[i].imprints);
}
for (i = 0; i <= BBP_THREADMASK; i++) {
- MT_lock_destroy(&GDKbbpLock[i].alloc);
+ MT_lock_destroy(&GDKbbpLock[i].cache);
MT_lock_destroy(&GDKbbpLock[i].trim);
GDKbbpLock[i].free = 0;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list