Changeset: 6680ce839306 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6680ce839306
Modified Files:
        gdk/ChangeLog.Jul2021
        gdk/gdk_bat.c
Branch: Jul2021
Log Message:

Set new capacity only after successful extend.


diffs (47 lines):

diff --git a/gdk/ChangeLog.Jul2021 b/gdk/ChangeLog.Jul2021
--- a/gdk/ChangeLog.Jul2021
+++ b/gdk/ChangeLog.Jul2021
@@ -1,6 +1,11 @@
 # ChangeLog file for GDK
 # This file is updated with Maddlog
 
+* Thu Dec  8 2022 Sjoerd Mullender <[email protected]>
+- When extending a bat failed, the capacity had been updated already and
+  was therefore too large.  This could then later cause a crash.  This has
+  been fixed by only updating the capacity if the extend succeeded.
+
 * Wed Dec  7 2022 Sjoerd Mullender <[email protected]>
 - A bug was fixed when dealing with copy-on-write memory maps.  These can
   occur for some bats used by the write-ahead log code when they grow
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -529,6 +529,7 @@ gdk_return
 BATextend(BAT *b, BUN newcap)
 {
        size_t theap_size;
+       gdk_return rc = GDK_SUCCEED;
 
        assert(newcap <= BUN_MAX);
        BATcheck(b, GDK_FAIL);
@@ -551,14 +552,17 @@ BATextend(BAT *b, BUN newcap)
        } else {
                theap_size = (size_t) newcap << b->tshift;
        }
-       b->batCapacity = newcap;
 
        if (b->theap->base) {
                TRC_DEBUG(HEAP, "HEAPgrow in BATextend %s %zu %zu\n",
                          b->theap->filename, b->theap->size, theap_size);
-               return HEAPgrow(&b->theaplock, &b->theap, theap_size, 
b->batRestricted == BAT_READ);
+               rc = HEAPgrow(&b->theaplock, &b->theap, theap_size, 
b->batRestricted == BAT_READ);
+               if (rc == GDK_SUCCEED)
+                       b->batCapacity = newcap;
+       } else {
+               b->batCapacity = newcap;
        }
-       return GDK_SUCCEED;
+       return rc;
 }
 
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to