Changeset: 94f72926051f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/94f72926051f
Modified Files:
sql/storage/store.c
Branch: check
Log Message:
merge with default
diffs (truncated from 1070 to 300 lines):
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -85,6 +85,7 @@ function(monetdb_configure_defines)
check_symbol_exists("getopt_long" "getopt.h" HAVE_GETOPT_LONG)
cmake_pop_check_state()
check_function_exists("getrlimit" HAVE_GETRLIMIT)
+ check_function_exists("gettid" HAVE_GETTID)
check_function_exists("gettimeofday" HAVE_GETTIMEOFDAY)
check_function_exists("getuid" HAVE_GETUID)
check_symbol_exists("gmtime_r" "time.h" HAVE_GMTIME_R)
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -18,7 +18,6 @@
* The following operations are defined:
* ATOMIC_VAR_INIT -- initializer for the variable (not necessarily atomic!);
* ATOMIC_INIT -- initialize the variable (not necessarily atomic!);
- * ATOMIC_DESTROY -- destroy the variable
* ATOMIC_GET -- return the value of a variable;
* ATOMIC_SET -- set the value of a variable;
* ATOMIC_XCG -- set the value of a variable, return original value;
@@ -114,7 +113,6 @@ typedef unsigned long ATOMIC_BASE_TYPE;
#endif
#define ATOMIC_INIT(var, val) atomic_init(var, (ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_DESTROY(var) ((void) 0)
#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE) *(var))
#define ATOMIC_SET(var, val) (*(var) = (ATOMIC_BASE_TYPE) (val))
#define ATOMIC_XCG(var, val) atomic_exchange(var, (ATOMIC_BASE_TYPE) (val))
@@ -173,7 +171,6 @@ typedef __declspec(align(8)) volatile AT
#define ATOMIC_VAR_INIT(val) (val)
#define ATOMIC_INIT(var, val) (*(var) = (val))
-#define ATOMIC_DESTROY(var) ((void) 0)
#if SIZEOF_SIZE_T == 8
@@ -276,7 +273,6 @@ typedef volatile ATOMIC_BASE_TYPE ATOMIC
#define ATOMIC_VAR_INIT(val) (val)
#define ATOMIC_INIT(var, val) (*(var) = (val))
-#define ATOMIC_DESTROY(var) ((void) 0)
#define ATOMIC_GET(var) ((ATOMIC_BASE_TYPE)
__atomic_load_n(var, __ATOMIC_SEQ_CST))
#define ATOMIC_SET(var, val) __atomic_store_n(var, (ATOMIC_BASE_TYPE) (val),
__ATOMIC_SEQ_CST)
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -258,6 +258,7 @@ BATmaterialize(BAT *b, BUN cap)
.farmid = BBPselectfarm(b->batRole, TYPE_oid, offheap),
.parentid = b->batCacheid,
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
settailname(tail, BBP_physical(b->batCacheid), TYPE_oid, 0);
if (HEAPalloc(tail, cap, sizeof(oid)) != GDK_SUCCEED) {
@@ -273,7 +274,6 @@ BATmaterialize(BAT *b, BUN cap)
for (p = 0; p < q; p++)
x[p] = t++;
}
- ATOMIC_INIT(&tail->refs, 1);
/* point of no return */
MT_lock_set(&b->theaplock);
assert((ATOMIC_GET(&b->theap->refs) & HEAPREFS) > 0);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -74,6 +74,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
*h = (Heap) {
.farmid = BBPselectfarm(role, tt, offheap),
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
if (ATOMneedheap(tt)) {
@@ -84,6 +85,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
*vh = (Heap) {
.farmid = BBPselectfarm(role, tt, varheap),
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
}
}
@@ -124,13 +126,11 @@ BATcreatedesc(oid hseq, int tt, bool hea
if (bn->theap) {
bn->theap->parentid = bn->batCacheid;
- ATOMIC_INIT(&bn->theap->refs, 1);
const char *nme = BBP_physical(bn->batCacheid);
settailname(bn->theap, nme, tt, width);
if (bn->tvheap) {
bn->tvheap->parentid = bn->batCacheid;
- ATOMIC_INIT(&bn->tvheap->refs, 1);
strconcat_len(bn->tvheap->filename,
sizeof(bn->tvheap->filename),
nme, ".theap", NULL);
@@ -603,6 +603,7 @@ BATclear(BAT *b, bool force)
.parentid = b->tvheap->parentid,
.dirty = true,
.hasfile = b->tvheap->hasfile,
+ .refs = ATOMIC_VAR_INIT(1),
};
strcpy_len(th->filename, b->tvheap->filename,
sizeof(th->filename));
if (ATOMheap(b->ttype, th, 0) != GDK_SUCCEED) {
@@ -610,7 +611,6 @@ BATclear(BAT *b, bool force)
return GDK_FAIL;
}
tvp = b->tvheap->parentid;
- ATOMIC_INIT(&th->refs, 1);
HEAPdecref(b->tvheap, false);
b->tvheap = th;
}
@@ -708,7 +708,6 @@ void
BATdestroy(BAT *b)
{
if (b->tvheap) {
- ATOMIC_DESTROY(&b->tvheap->refs);
GDKfree(b->tvheap);
}
PROPdestroy_nolock(b);
@@ -716,7 +715,6 @@ BATdestroy(BAT *b)
MT_lock_destroy(&b->batIdxLock);
MT_rwlock_destroy(&b->thashlock);
if (b->theap) {
- ATOMIC_DESTROY(&b->theap->refs);
GDKfree(b->theap);
}
if (b->oldtail) {
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -34,6 +34,7 @@ unshare_varsized_heap(BAT *b)
*h = (Heap) {
.parentid = b->batCacheid,
.farmid = BBPselectfarm(b->batRole, TYPE_str, varheap),
+ .refs = ATOMIC_VAR_INIT(1),
};
strconcat_len(h->filename, sizeof(h->filename),
BBP_physical(b->batCacheid), ".theap", NULL);
@@ -42,7 +43,6 @@ unshare_varsized_heap(BAT *b)
GDKfree(h);
return GDK_FAIL;
}
- ATOMIC_INIT(&h->refs, 1);
MT_lock_set(&b->theaplock);
Heap *oh = b->tvheap;
b->tvheap = h;
@@ -415,6 +415,7 @@ append_varsized_bat(BAT *b, BATiter *ni,
*h = (Heap) {
.parentid = b->batCacheid,
.farmid = BBPselectfarm(b->batRole, b->ttype, varheap),
+ .refs = ATOMIC_VAR_INIT(1),
};
strconcat_len(h->filename, sizeof(h->filename),
BBP_physical(b->batCacheid), ".theap", NULL);
@@ -423,7 +424,6 @@ append_varsized_bat(BAT *b, BATiter *ni,
GDKfree(h);
return GDK_FAIL;
}
- ATOMIC_INIT(&h->refs, 1);
MT_lock_set(&b->theaplock);
Heap *oh = b->tvheap;
b->tvheap = h;
@@ -2731,7 +2731,6 @@ BATsort(BAT **sorted, BAT **order, BAT *
ords,
pbi.count * sizeof(oid));
}
- ATOMIC_INIT(&m->refs, 1);
pb->torderidx = m;
persistOIDX(pb);
} else {
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -4875,9 +4875,14 @@ BBPprintinfo(void)
ATOMIC_BASE_TYPE status = BBP_status(i);
struct counters *bt = &bats[r > 0][BATdirty(b)][(status
& BBPPERSISTENT) != 0][(status & BBPLOADED) != 0][(status & BBPHOT) != 0];
bt->nr++;
- bt->sz += HEAPmemsize(b->theap) +
HEAPmemsize(b->tvheap);
- bt->vmsz += HEAPvmsize(b->theap) +
HEAPvmsize(b->tvheap);
- MT_lock_unset(&b->theaplock);
+ if (b->theap && b->batCacheid == b->theap->parentid) {
+ bt->sz += HEAPmemsize(b->theap);
+ bt->vmsz += HEAPvmsize(b->theap);
+ }
+ if (b->tvheap && b->batCacheid == b->tvheap->parentid) {
+ bt->sz += HEAPmemsize(b->tvheap);
+ bt->vmsz += HEAPvmsize(b->tvheap);
+ }
MT_lock_unset(&b->theaplock);
}
MT_lock_unset(&GDKswapLock(i));
diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -1320,6 +1320,7 @@ BATnegcands(BUN nr, BAT *odels)
.farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap),
.parentid = bn->batCacheid,
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
strconcat_len(dels->filename, sizeof(dels->filename),
nme, ".theap", NULL);
@@ -1330,7 +1331,6 @@ BATnegcands(BUN nr, BAT *odels)
BBPreclaim(bn);
return NULL;
}
- ATOMIC_INIT(&dels->refs, 1);
c = (ccand_t *) dels->base;
*c = (ccand_t) {
.type = CAND_NEGOID,
@@ -1388,6 +1388,7 @@ BATmaskedcands(oid hseq, BUN nr, BAT *ma
.farmid = BBPselectfarm(bn->batRole, bn->ttype, varheap),
.parentid = bn->batCacheid,
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
strconcat_len(msks->filename, sizeof(msks->filename),
nme, ".theap", NULL);
@@ -1438,7 +1439,6 @@ BATmaskedcands(oid hseq, BUN nr, BAT *ma
cnt += candmask_pop(r[i]);
}
if (cnt > 0) {
- ATOMIC_INIT(&msks->refs, 1);
assert(bn->tvheap == NULL);
bn->tvheap = msks;
bn->tseqbase += (oid) c->firstbit;
@@ -1504,6 +1504,7 @@ BATunmask(BAT *b)
.farmid = BBPselectfarm(TRANSIENT, TYPE_void, varheap),
.parentid = bn->batCacheid,
.dirty = true,
+ .refs = ATOMIC_VAR_INIT(1),
};
strconcat_len(dels->filename, sizeof(dels->filename),
BBP_physical(bn->batCacheid), ".theap", NULL);
@@ -1538,7 +1539,6 @@ BATunmask(BAT *b)
} else {
dels->free = sizeof(ccand_t) + n * sizeof(oid);
dels->dirty = true;
- ATOMIC_INIT(&dels->refs, 1);
assert(bn->tvheap == NULL);
bn->tvheap = dels;
}
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -106,10 +106,10 @@ HEAPgrow(Heap **hp, size_t size, bool ma
.parentid = old->parentid,
.wasempty = old->wasempty,
.hasfile = old->hasfile,
+ .refs = ATOMIC_VAR_INIT(1 | (refs & HEAPREMOVE)),
};
memcpy(new->filename, old->filename, sizeof(new->filename));
if (HEAPalloc(new, size, 1) == GDK_SUCCEED) {
- ATOMIC_INIT(&new->refs, 1 | (refs & HEAPREMOVE));
new->free = old->free;
new->cleanhash = old->cleanhash;
if (old->free > 0 &&
@@ -497,6 +497,7 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
.dirty = true,
.parentid = old->parentid,
.wasempty = old->wasempty,
+ .refs = ATOMIC_VAR_INIT(1 | (ATOMIC_GET(&old->refs) &
HEAPREMOVE)),
};
settailname(new, BBP_physical(b->batCacheid), b->ttype, width);
if (HEAPalloc(new, newsize, 1) != GDK_SUCCEED) {
@@ -505,7 +506,6 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
}
/* HEAPalloc initialized .free, so we need to set it after */
new->free = old->free << (shift - b->tshift);
- ATOMIC_INIT(&new->refs, 1 | (ATOMIC_GET(&old->refs) & HEAPREMOVE));
/* per the above, width > b->twidth, so certain combinations are
* impossible */
switch (width) {
@@ -697,7 +697,6 @@ HEAPdecref(Heap *h, bool remove)
//printf("dec ref(%d) %p %d\n", (int)h->refs, h, h->parentid);
switch (refs & HEAPREFS) {
case 0:
- ATOMIC_DESTROY(&h->refs);
HEAPfree(h, (bool) (refs & HEAPREMOVE));
GDKfree(h);
break;
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -837,7 +837,6 @@ IMPSdecref(Imprints *imprints, bool remo
ATOMIC_OR(&imprints->imprints.refs, HEAPREMOVE);
ATOMIC_BASE_TYPE refs = ATOMIC_DEC(&imprints->imprints.refs);
if ((refs & HEAPREFS) == 0) {
- ATOMIC_DESTROY(&imprints->imprints.refs);
HEAPfree(&imprints->imprints, (bool) (refs & HEAPREMOVE));
GDKfree(imprints);
}
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2319,8 +2319,6 @@ log_load(const char *fn, const char *log
logbat_destroy(lg->seqs_id);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]