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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org