Changeset: 47cc22f80df8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/47cc22f80df8
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_private.h
        gdk/gdk_utils.c
Branch: Jul2021
Log Message:

Move declarations/definitions to only file where they're actually used.


diffs (162 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -110,6 +110,18 @@ struct BBPfarm_t BBPfarms[MAXFARMS];
 static MT_Lock BBPnameLock = MT_LOCK_INITIALIZER(BBPnameLock);
 static bat *BBP_hash = NULL;           /* BBP logical name hash buckets */
 static bat BBP_mask = 0;               /* number of buckets = & mask */
+#define BBP_THREADMASK 63
+#if SIZEOF_SIZE_T == 8
+#define threadmask(y)  ((int) (mix_lng(y) & BBP_THREADMASK))
+#else
+#define threadmask(y)  ((int) (mix_int(y) & BBP_THREADMASK))
+#endif
+static struct {
+       MT_Lock cache;
+       bat free;
+} GDKbbpLock[BBP_THREADMASK + 1];
+#define GDKcacheLock(y)        GDKbbpLock[y].cache
+#define BBP_free(y)    GDKbbpLock[y].free
 
 static gdk_return BBPfree(BAT *b);
 static void BBPdestroy(BAT *b);
@@ -236,6 +248,8 @@ getBBPtransid(void)
  */
 static volatile MT_Id locked_by = 0;
 
+/* use a lock instead of atomic instructions so that we wait for
+ * BBPlock/BBPunlock */
 #define BBP_unload_inc()                       \
        do {                                    \
                MT_lock_set(&GDKunloadLock);    \
@@ -1133,7 +1147,7 @@ BBPmanager(void *dummy)
 static MT_Id manager;
 
 gdk_return
-BBPinit(void)
+BBPinit(bool first)
 {
        FILE *fp = NULL;
        struct stat st;
@@ -1150,6 +1164,14 @@ BBPinit(void)
         * array */
        static_assert((uint64_t) N_BBPINIT * BBPINIT < (UINT64_C(1) << (3 * 
(sizeof(BBP[0][0].bak) - 5))), "\"bak\" array in BBPrec is too small");
 
+       if (first) {
+               for (i = 0; i <= BBP_THREADMASK; i++) {
+                       char name[MT_NAME_LEN];
+                       snprintf(name, sizeof(name), "GDKcacheLock%d", i);
+                       MT_lock_init(&GDKbbpLock[i].cache, name);
+                       GDKbbpLock[i].free = 0;
+               }
+       }
        if (!GDKinmemory(0)) {
                str bbpdirstr, backupbbpdirstr;
 
@@ -3954,6 +3976,9 @@ gdk_bbp_reset(void)
 {
        int i;
 
+       for (i = 0; i <= BBP_THREADMASK; i++) {
+               GDKbbpLock[i].free = 0;
+       }
        while (BBPlimit > 0) {
                BBPlimit -= BBPINIT;
                assert(BBPlimit >= 0);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -98,7 +98,7 @@ void BBPdump(void)            /* never called: for
        __attribute__((__cold__));
 void BBPexit(void)
        __attribute__((__visibility__("hidden")));
-gdk_return BBPinit(void)
+gdk_return BBPinit(bool first)
        __attribute__((__visibility__("hidden")));
 bat BBPinsert(BAT *bn)
        __attribute__((__warn_unused_result__))
@@ -391,7 +391,6 @@ ilog2(BUN x)
        b ? b->timprints ? "I" : b->theap && b->theap->parentid && 
BBP_cache(b->theap->parentid) && BBP_cache(b->theap->parentid)->timprints ? 
"(I)" : "" : ""
 
 #define BBP_BATMASK    ((1 << (SIZEOF_SIZE_T + 5)) - 1)
-#define BBP_THREADMASK 63
 
 struct PROPrec {
        enum prop_t id;
@@ -414,11 +413,6 @@ typedef struct {
        MT_Lock swap;
 } batlock_t;
 
-typedef struct {
-       MT_Lock cache;
-       bat free;
-} bbplock_t;
-
 typedef char long_str[IDLENGTH];       /* standard GDK static string */
 
 #define MAXFARMS       32
@@ -430,7 +424,6 @@ extern struct BBPfarm_t {
 } BBPfarms[MAXFARMS];
 
 extern batlock_t GDKbatLock[BBP_BATMASK + 1];
-extern bbplock_t GDKbbpLock[BBP_THREADMASK + 1];
 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 */
@@ -453,13 +446,6 @@ extern MT_Lock GDKtmLock;
        } while (0)
 
 #define GDKswapLock(x)  GDKbatLock[(x)&BBP_BATMASK].swap
-#if SIZEOF_SIZE_T == 8
-#define threadmask(y)  ((int) (mix_lng(y) & BBP_THREADMASK))
-#else
-#define threadmask(y)  ((int) (mix_int(y) & BBP_THREADMASK))
-#endif
-#define GDKcacheLock(y)        GDKbbpLock[y].cache
-#define BBP_free(y)    GDKbbpLock[y].free
 
 /* when the number of updates to a BAT is less than 1 in this number, we
  * keep the GDK_UNIQUE_ESTIMATE property */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -941,12 +941,6 @@ GDKinit(opt *set, int setlen, bool embed
                        snprintf(name, sizeof(name), "GDKswapLock%d", i);
                        MT_lock_init(&GDKbatLock[i].swap, name);
                }
-               for (i = 0; i <= BBP_THREADMASK; i++) {
-                       char name[MT_NAME_LEN];
-                       snprintf(name, sizeof(name), "GDKcacheLock%d", i);
-                       MT_lock_init(&GDKbbpLock[i].cache, name);
-                       GDKbbpLock[i].free = 0;
-               }
                if (mnstr_init() < 0) {
                        TRC_CRITICAL(GDK, "mnstr_init failed\n");
                        return GDK_FAIL;
@@ -1000,7 +994,7 @@ GDKinit(opt *set, int setlen, bool embed
        else
 #endif
        GDK_mem_maxsize = (size_t) ((double) MT_npages() * (double) 
MT_pagesize() * 0.815);
-       if (BBPinit() != GDK_SUCCEED)
+       if (BBPinit(first) != GDK_SUCCEED)
                return GDK_FAIL;
 
        if (GDK_mem_maxsize / 16 < GDK_mmap_minsize_transient) {
@@ -1293,9 +1287,6 @@ GDKreset(int status)
                ATOMIC_SET(&GDKnrofthreads, 0);
                close_stream((stream *) THRdata[0]);
                close_stream((stream *) THRdata[1]);
-               for (int i = 0; i <= BBP_THREADMASK; i++) {
-                       GDKbbpLock[i].free = 0;
-               }
 
                memset(THRdata, 0, sizeof(THRdata));
                gdk_bbp_reset();
@@ -1331,7 +1322,6 @@ GDKexit(int status)
  */
 
 batlock_t GDKbatLock[BBP_BATMASK + 1];
-bbplock_t GDKbbpLock[BBP_THREADMASK + 1];
 MT_Lock GDKthreadLock = MT_LOCK_INITIALIZER(GDKthreadLock);
 
 /* GDKtmLock protects all accesses and changes to BAKDIR and SUBDIR */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to