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

Reply via email to