Changeset: 8db7ae52c4b5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8db7ae52c4b5
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_batop.c
Branch: Jul2021
Log Message:

When unsharing a vheap, also unfix the (former) parent.


diffs (46 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -140,6 +140,7 @@ VIEWcreate(oid seq, BAT *b)
                }
                if (bn->tvheap) {
                        BBPunshare(bn->tvheap->parentid);
+                       BBPunfix(bn->tvheap->parentid);
                        HEAPdecref(bn->tvheap, false);
                }
                HEAPdecref(bn->theap, false);
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -91,8 +91,10 @@ insert_string_bat(BAT *b, BAT *n, struct
                /* we can share the vheaps, so we then only need to
                 * append the offsets */
                MT_lock_set(&b->theaplock);
-               if (b->tvheap->parentid != b->batCacheid)
+               if (b->tvheap->parentid != b->batCacheid) {
                        BBPunshare(b->tvheap->parentid);
+                       BBPunfix(b->tvheap->parentid);
+               }
                HEAPdecref(b->tvheap, b->tvheap->parentid == b->batCacheid);
                HEAPincref(ni.vh);
                b->tvheap = ni.vh;
@@ -381,8 +383,10 @@ append_varsized_bat(BAT *b, BAT *n, stru
                /* make sure locking happens in a predictable order:
                 * lowest id first */
                MT_lock_set(&b->theaplock);
-               if (b->tvheap->parentid != b->batCacheid)
+               if (b->tvheap->parentid != b->batCacheid) {
                        BBPunshare(b->tvheap->parentid);
+                       BBPunfix(b->tvheap->parentid);
+               }
                BBPshare(ni.vh->parentid);
                HEAPdecref(b->tvheap, true);
                HEAPincref(ni.vh);
@@ -441,6 +445,7 @@ append_varsized_bat(BAT *b, BAT *n, stru
                        return GDK_FAIL;
                }
                BBPunshare(b->tvheap->parentid);
+               BBPunfix(b->tvheap->parentid);
                MT_lock_set(&b->theaplock);
                HEAPdecref(b->tvheap, false);
                ATOMIC_INIT(&h->refs, 1);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to