Changeset: 5d976ee54e97 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d976ee54e97
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_batop.c
Branch: Jun2020
Log Message:

Fixing BAT leaks: decref physical count after vheap unshare.


diffs (55 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -129,10 +129,14 @@ VIEWcreate(oid seq, BAT *b)
        /* Order OID index */
        bn->torderidx = NULL;
        if (BBPcacheit(bn, true) != GDK_SUCCEED) {      /* enter in BBP */
-               if (tp)
+               if (tp) {
                        BBPunshare(tp);
-               if (bn->tvheap)
+                       BBPunfix(tp);
+               }
+               if (bn->tvheap) {
                        BBPunshare(bn->tvheap->parentid);
+                       BBPunfix(bn->tvheap->parentid);
+               }
                MT_lock_destroy(&bn->batIdxLock);
                GDKfree(bn);
                return NULL;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -37,6 +37,7 @@ unshare_string_heap(BAT *b)
                        return GDK_FAIL;
                }
                BBPunshare(b->tvheap->parentid);
+               BBPunfix(b->tvheap->parentid);
                b->tvheap = h;
        }
        return GDK_SUCCEED;
@@ -106,6 +107,7 @@ insert_string_bat(BAT *b, BAT *n, struct
                            ci->tpe == cand_dense) {
                                if (b->tvheap->parentid != bid) {
                                        BBPunshare(b->tvheap->parentid);
+                                       BBPunfix(b->tvheap->parentid);
                                } else {
                                        HEAPfree(b->tvheap, true);
                                        GDKfree(b->tvheap);
@@ -417,6 +419,7 @@ append_varsized_bat(BAT *b, BAT *n, stru
                 * to n's */
                if (b->tvheap->parentid != b->batCacheid) {
                        BBPunshare(b->tvheap->parentid);
+                       BBPunfix(b->tvheap->parentid);
                } else {
                        HEAPfree(b->tvheap, true);
                        GDKfree(b->tvheap);
@@ -468,6 +471,7 @@ append_varsized_bat(BAT *b, BAT *n, stru
                        return GDK_FAIL;
                }
                BBPunshare(b->tvheap->parentid);
+               BBPunfix(b->tvheap->parentid);
                b->tvheap = h;
        }
        /* copy data from n to b */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to