Changeset: 94e5d23636c3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/94e5d23636c3
Modified Files:
        gdk/gdk_bat.c
        sql/storage/bat/bat_logger.c
Branch: Jan2022
Log Message:

Merge with Jul2021 branch.


diffs (31 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -674,11 +674,27 @@ BATfree(BAT *b)
        if (nunique != BUN_NONE) {
                b->tunique_est = (double) nunique;
        }
+       /* wait until there are no other references to the heap; a
+        * reference is possible in e.g. BBPsync that uses a
+        * bat_iterator directly on the BBP_desc, i.e. without fix */
+       while (b->theap && (ATOMIC_GET(&b->theap->refs) & HEAPREFS) > 1) {
+               MT_lock_unset(&b->theaplock);
+               MT_sleep_ms(1);
+               MT_lock_set(&b->theaplock);
+       }
        if (b->theap) {
                assert((ATOMIC_GET(&b->theap->refs) & HEAPREFS) == 1);
                assert(b->theap->parentid == b->batCacheid);
                HEAPfree(b->theap, false);
        }
+       /* wait until there are no other references to the heap; a
+        * reference is possible in e.g. BBPsync that uses a
+        * bat_iterator directly on the BBP_desc, i.e. without fix */
+       while (b->tvheap && (ATOMIC_GET(&b->tvheap->refs) & HEAPREFS) > 1) {
+               MT_lock_unset(&b->theaplock);
+               MT_sleep_ms(1);
+               MT_lock_set(&b->theaplock);
+       }
        if (b->tvheap) {
                assert((ATOMIC_GET(&b->tvheap->refs) & HEAPREFS) == 1);
                assert(b->tvheap->parentid == b->batCacheid);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to