Changeset: 156d703a7c9c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/156d703a7c9c
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        monetdb5/modules/mal/mat.c
Branch: Jul2021
Log Message:

Changed BATsetaccess to always unfix the input on failure.


diffs (47 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2181,9 +2181,9 @@ BATsetaccess(BAT *b, restrict_t newmode)
        BATcheck(b, NULL);
        if ((isVIEW(b) || b->batSharecnt) && newmode != BAT_READ) {
                BAT *bn = COLcopy(b, b->ttype, true, TRANSIENT);
+               BBPunfix(b->batCacheid);
                if (bn == NULL)
                        return NULL;
-               BBPunfix(b->batCacheid);
                b = bn;
        }
        bakmode = (restrict_t) b->batRestricted;
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2511,14 +2511,15 @@ BBPkeepref(bat i)
                bool lock = locked_by == 0 || locked_by != MT_getpid();
                BAT *b;
 
+               incref(i, true, lock);
                if ((b = BBPdescriptor(i)) != NULL) {
-                       b = BATsetaccess(b, BAT_READ);
                        BATsettrivprop(b);
                        if (GDKdebug & (CHECKMASK | PROPMASK))
                                BATassertProps(b);
+                       if (BATsetaccess(b, BAT_READ) == NULL)
+                               return; /* already decreffed */
                }
 
-               incref(i, true, lock);
                assert(BBP_refs(i));
                decref(i, false, false, lock, "BBPkeepref");
        }
diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c
--- a/monetdb5/modules/mal/mat.c
+++ b/monetdb5/modules/mal/mat.c
@@ -198,7 +198,7 @@ MATpackIncrement(Client cntxt, MalBlkPtr
                }
                BBPunfix(bb->batCacheid);
                b->unused--;
-               if (b->unused == 0 && !(b = BATsetaccess(b, BAT_READ)))
+               if (b->unused == 0 && (b = BATsetaccess(b, BAT_READ)) == NULL)
                        throw(MAL, "mat.pack", GDK_EXCEPTION);
                if (b->tnil && b->tnonil) {
                        BBPunfix(b->batCacheid);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to