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]
