Changeset: b402b0a4eaf2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b402b0a4eaf2
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_heap.c
Branch: Jun2023
Log Message:

Merge with Sep2022 branch.


diffs (43 lines):

diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2891,6 +2891,7 @@ PROPdestroy_nolock(BAT *b)
        b->tprops = NULL;
        while (p) {
                n = p->next;
+               assert(p->id != (enum prop_t) 20);
                VALclear(&p->v);
                GDKfree(p);
                p = n;
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1913,6 +1913,12 @@ BBPexit(void)
                                                HEAPdecref(b->tvheap, false);
                                                b->tvheap = NULL;
                                        }
+                                       if (b->oldtail) {
+                                               Heap *h = b->oldtail;
+                                               b->oldtail = NULL;
+                                               ATOMIC_AND(&h->refs, 
~DELAYEDREMOVE);
+                                               HEAPdecref(h, false);
+                                       }
                                        PROPdestroy_nolock(b);
                                        MT_lock_unset(&b->theaplock);
                                        BATfree(b);
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -601,7 +601,11 @@ GDKupgradevarheap(BAT *b, var_t v, BUN c
        b->theap = new;
        if (BBP_status(bid) & (BBPEXISTING|BBPDELETED) && b->oldtail == NULL) {
                b->oldtail = old;
-               ATOMIC_OR(&old->refs, DELAYEDREMOVE);
+               if ((ATOMIC_OR(&old->refs, DELAYEDREMOVE) & HEAPREFS) == 1) {
+                       /* we have the only reference, we can free the
+                        * memory */
+                       HEAPfree(old, false);
+               }
        } else {
                ValPtr p = BATgetprop_nolock(b, (enum prop_t) 20);
                HEAPdecref(old, p == NULL || strcmp(((Heap*) 
p->val.pval)->filename, old->filename) != 0);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to