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