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

Reply via email to