Changeset: 3dff7755917e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3dff7755917e
Modified Files:
gdk/gdk_align.c
gdk/gdk_bbp.c
gdk/gdk_hash.c
Branch: Aug2018
Log Message:
Don't share hash heaps between parent and view.
Since views now use their parent's hash if appropriate, we have a more
general approach.
diffs (128 lines):
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -123,10 +123,7 @@ VIEWcreate(oid seq, BAT *b)
bn->theap.parentid = tp;
BATinit_idents(bn);
bn->batRestricted = BAT_READ;
- if (!tp || isVIEW(b))
- bn->thash = NULL;
- else
- bn->thash = b->thash;
+ bn->thash = NULL;
/* imprints are shared, but the check is dynamic */
bn->timprints = NULL;
/* Order OID index */
@@ -241,10 +238,6 @@ VIEWunlink(BAT *b)
if (tpb && b->tprops && b->tprops == tpb->tprops)
b->tprops = NULL;
- /* unlink hash accelerators shared with parent */
- if (tpb && b->thash && b->thash == tpb->thash)
- b->thash = NULL;
-
/* unlink imprints shared with parent */
if (tpb && b->timprints && b->timprints == tpb->timprints)
b->timprints = NULL;
@@ -405,9 +398,6 @@ VIEWbounds(BAT *b, BAT *view, BUN l, BUN
} else {
view->tnokey[0] = view->tnokey[1] = 0;
}
- /* slices are unequal to their parents; cannot use accs */
- if (b->thash == view->thash)
- view->thash = NULL;
}
/*
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1814,7 +1814,7 @@ BBPdump(void)
}
}
}
- if (b->thash && b->thash != (Hash *) -1) {
+ if (b->thash && b->thash != (Hash *) 1) {
fprintf(stderr,
" Thash=[%zu,%zu]",
HEAPmemsize(&b->thash->heap),
@@ -2394,12 +2394,6 @@ incref(bat i, bool logical, bool lock)
if (tp) {
assert(pb != NULL);
b->theap.base = pb->theap.base + (size_t) b->theap.base;
- /* if we shared the hash before, share it
- * again note that if the parent's hash is
- * destroyed, we also don't have a hash
- * anymore */
- if (b->thash == (Hash *) -1)
- b->thash = pb->thash;
}
/* done loading, release descriptor */
BBP_status_off(i, BBPLOADING, "BBPfix");
@@ -2494,12 +2488,6 @@ decref(bat i, bool logical, bool release
if (b && refs == 0) {
if ((tp = b->theap.parentid) != 0)
b->theap.base = (char *) (b->theap.base
- BBP_cache(tp)->theap.base);
- /* if a view shared the hash with its
- * parent, indicate this, but only if
- * view isn't getting destroyed */
- if (tp && b->thash &&
- b->thash == BBP_cache(tp)->thash)
- b->thash = (Hash *) -1;
tvp = VIEWvtparent(b);
}
}
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -649,7 +649,7 @@ HASHdestroy(BAT *b)
if (p)
hp = BBP_cache(p);
- if ((!hp || hs != hp->thash) && hs != (Hash *) -1) {
+ if (!hp || hs != hp->thash) {
ALGODEBUG if (*(size_t *) hs->heap.base & (1 <<
24))
fprintf(stderr, "#HASHdestroy: removing
persisted hash %d\n", b->batCacheid);
HEAPfree(&hs->heap, true);
@@ -662,35 +662,14 @@ HASHdestroy(BAT *b)
void
HASHfree(BAT *b)
{
- int err = 0;
if (b) {
MT_lock_set(&GDKhashLock(b->batCacheid));
- if (b->thash && b->thash != (Hash *) -1) {
- if (b->thash != (Hash *) 1) {
- if (b->thash->heap.storage == STORE_MEM &&
- b->thash->heap.dirty) {
- if (GDKsave(b->thash->heap.farmid,
- b->thash->heap.filename,
- NULL,
- b->thash->heap.base,
- b->thash->heap.free,
- STORE_MEM,
- false) != GDK_SUCCEED) {
- /* if saving failed, remove */
-
GDKunlink(BBPselectfarm(b->batRole, b->ttype, hashheap),
- BATDIR,
-
BBP_physical(b->batCacheid),
- "thash");
- err = 1;
- }
- b->thash->heap.dirty = FALSE;
- }
- HEAPfree(&b->thash->heap, false);
- GDKfree(b->thash);
- b->thash = err ? NULL : (Hash *) 1;
- }
- } else {
- b->thash = NULL;
+ if (b->thash && b->thash != (Hash *) 1) {
+ bool dirty = b->thash->heap.dirty;
+
+ HEAPfree(&b->thash->heap, dirty);
+ GDKfree(b->thash);
+ b->thash = dirty ? NULL : (Hash *) 1;
}
MT_lock_unset(&GDKhashLock(b->batCacheid));
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list