Changeset: ce40fca50143 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ce40fca50143 Modified Files: gdk/gdk_bat.c gdk/gdk_logger.c Branch: default Log Message:
Merge with Sep2022 branch. diffs (127 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -789,3 +789,4 @@ 43d4a717410d6f6692a16a878640fc7e0f248725 43d4a717410d6f6692a16a878640fc7e0f248725 Jan2022_SP6_release 5c50a4071c86d1621e20a885a51cc36f2f23eec4 Sep2022_9 41ca60d96bd0198ca5d74937630a442a5fbaf1cd Sep2022_11 +41ca60d96bd0198ca5d74937630a442a5fbaf1cd Sep2022_SP1_release diff --git a/gdk/ChangeLog.Sep2022 b/gdk/ChangeLog.Sep2022 --- a/gdk/ChangeLog.Sep2022 +++ b/gdk/ChangeLog.Sep2022 @@ -1,3 +1,8 @@ # ChangeLog file for GDK # This file is updated with Maddlog +* Thu Dec 8 2022 Sjoerd Mullender <sjo...@acm.org> +- 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. + diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -548,9 +548,11 @@ BATextend(BAT *b, BUN newcap) TRC_DEBUG(HEAP, "HEAPgrow in BATextend %s %zu %zu\n", b->theap->filename, b->theap->size, theap_size); rc = HEAPgrow(&b->theap, theap_size, b->batRestricted == BAT_READ); + if (rc == GDK_SUCCEED) + b->batCapacity = newcap; + } else { + b->batCapacity = newcap; } - - b->batCapacity = newcap; MT_lock_unset(&b->theaplock); return rc; diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2807,12 +2807,9 @@ new_logfile(logger *lg) const lng log_large = (GDKdebug & FORCEMITOMASK)?LOG_MINI:LOG_LARGE; gdk_return result = GDK_SUCCEED; - MT_lock_set(&lg->rotation_lock); const lng p = (lng) getfilepos(getFile(lg->output_log)); - if (p == -1) { - MT_lock_unset(&lg->rotation_lock); + if (p == -1) return GDK_FAIL; - } if (( p > log_large || (lg->end*1024) > log_large )) { log_lock(lg); if (ATOMIC_GET(&lg->refcount) == 1) { @@ -2827,7 +2824,6 @@ new_logfile(logger *lg) } log_unlock(lg); } - MT_lock_unset(&lg->rotation_lock); return result; } @@ -2934,16 +2930,19 @@ log_tflush(logger* lg, ulng log_file_id, /* number of transactions in the group commit */ const int fqueue_length = flush_queue_length(lg); /* flush + fsync */ + MT_lock_set(&lg->rotation_lock); if (mnstr_flush(lg->output_log, MNSTR_FLUSH_DATA) || (!(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->output_log)) || new_logfile(lg) != GDK_SUCCEED) { /* flush failed */ + MT_lock_unset(&lg->rotation_lock); MT_lock_unset(&lg->flush_lock); (void) ATOMIC_DEC(&lg->refcount); return GDK_FAIL; } else { /* flush succeeded */ + MT_lock_unset(&lg->rotation_lock); left_truncate_flush_queue(lg, fqueue_length); } } diff --git a/sql/ChangeLog.Sep2022 b/sql/ChangeLog.Sep2022 --- a/sql/ChangeLog.Sep2022 +++ b/sql/ChangeLog.Sep2022 @@ -1,3 +1,7 @@ # ChangeLog file for sql # This file is updated with Maddlog +* Wed Dec 7 2022 Sjoerd Mullender <sjo...@acm.org> +- Fixed a double cleanup after a failed allocation in COPY INTO. The + double cleanup could cause a crash due to a race condition it enabled. + diff --git a/sql/test/testdb-upgrade-hge/Tests/dump.stable.out b/sql/test/testdb-upgrade-hge/Tests/dump.stable.out --- a/sql/test/testdb-upgrade-hge/Tests/dump.stable.out +++ b/sql/test/testdb-upgrade-hge/Tests/dump.stable.out @@ -1,9 +1,12 @@ START TRANSACTION; SET SCHEMA "sys"; -CREATE USER "testuser" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Test User' SCHEMA "sys"; +CREATE USER "testuser" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Test User' SCHEMA "sys" MAX_MEMORY 1000000000 MAX_WORKERS 5 OPTIMIZER 'minimal_pipe' DEFAULT ROLE "monetdb"; +CREATE USER "testuser2" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Second Test User' SCHEMA "sys"; CREATE SCHEMA "testschema" AUTHORIZATION "testuser"; COMMENT ON SCHEMA "testschema" IS 'a schema used for testing'; +CREATE SCHEMA "testuser2" AUTHORIZATION "testuser2"; ALTER USER "testuser" SET SCHEMA "testschema"; +ALTER USER "testuser2" SET SCHEMA "testuser2"; GRANT COPY FROM TO "testuser"; CREATE SEQUENCE "testschema"."selfref_seq" AS INTEGER; COMMENT ON SEQUENCE "testschema"."selfref_seq" IS 'sequence number for selfref table'; diff --git a/sql/test/testdb-upgrade/Tests/dump.stable.out b/sql/test/testdb-upgrade/Tests/dump.stable.out --- a/sql/test/testdb-upgrade/Tests/dump.stable.out +++ b/sql/test/testdb-upgrade/Tests/dump.stable.out @@ -1,9 +1,12 @@ START TRANSACTION; SET SCHEMA "sys"; -CREATE USER "testuser" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Test User' SCHEMA "sys"; +CREATE USER "testuser" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Test User' SCHEMA "sys" MAX_MEMORY 1000000000 MAX_WORKERS 5 OPTIMIZER 'minimal_pipe' DEFAULT ROLE "monetdb"; +CREATE USER "testuser2" WITH ENCRYPTED PASSWORD 'e9e633097ab9ceb3e48ec3f70ee2beba41d05d5420efee5da85f97d97005727587fda33ef4ff2322088f4c79e8133cc9cd9f3512f4d3a303cbdb5bc585415a00' NAME 'Second Test User' SCHEMA "sys"; CREATE SCHEMA "testschema" AUTHORIZATION "testuser"; COMMENT ON SCHEMA "testschema" IS 'a schema used for testing'; +CREATE SCHEMA "testuser2" AUTHORIZATION "testuser2"; ALTER USER "testuser" SET SCHEMA "testschema"; +ALTER USER "testuser2" SET SCHEMA "testuser2"; GRANT COPY FROM TO "testuser"; CREATE SEQUENCE "testschema"."selfref_seq" AS INTEGER; COMMENT ON SEQUENCE "testschema"."selfref_seq" IS 'sequence number for selfref table'; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org