Changeset: 12578f94df5a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/12578f94df5a
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_bbp.c
        gdk/gdk_private.h
Branch: Jul2021
Log Message:

Make sure heap files of transients get deleted, even if "partial" views.


diffs (69 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -266,7 +266,7 @@ BATmaterialize(BAT *b)
  * The @#VIEWunlink@ routine cuts a reference to the parent. Part of the view
  * destroy sequence.
  */
-static void
+void
 VIEWunlink(BAT *b)
 {
        if (b) {
@@ -279,8 +279,6 @@ VIEWunlink(BAT *b)
 
                if (tp)
                        tpb = BBP_cache(tp);
-               if (tp && !vtp)
-                       vtp = tp;
                if (vtp)
                        vtpb = BBP_cache(vtp);
 
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -3021,9 +3021,11 @@ BBPdestroy(BAT *b)
        bat tp = VIEWtparent(b);
        bat vtp = VIEWvtparent(b);
 
-       if (isVIEW(b)) {        /* a physical view */
-               VIEWdestroy(b);
-       } else {
+       HASHdestroy(b);
+       IMPSdestroy(b);
+       OIDXdestroy(b);
+       PROPdestroy(b);
+       if (tp == 0) {
                /* bats that get destroyed must unfix their atoms */
                gdk_return (*tunfix) (const void *) = 
BATatoms[b->ttype].atomUnfix;
                assert(b->batSharecnt == 0);
@@ -3036,8 +3038,16 @@ BBPdestroy(BAT *b)
                                (void) (*tunfix)(BUNtail(bi, p));
                        }
                }
-               BATdelete(b);   /* handles persistent case also (file deletes) 
*/
        }
+       if (tp || vtp)
+               VIEWunlink(b);
+       if (b->theap) {
+               HEAPfree(b->theap, true);
+       }
+       if (b->tvheap)
+               HEAPfree(b->tvheap, true);
+       b->batCopiedtodisk = false;
+
        BBPclear(b->batCacheid, true);  /* if destroyed; de-register from BBP */
 
        /* parent released when completely done with child */
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -270,6 +270,8 @@ gdk_return unshare_varsized_heap(BAT *b)
        __attribute__((__visibility__("hidden")));
 void VIEWdestroy(BAT *b)
        __attribute__((__visibility__("hidden")));
+void VIEWunlink(BAT *b)
+       __attribute__((__visibility__("hidden")));
 BAT *virtualize(BAT *bn)
        __attribute__((__visibility__("hidden")));
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to