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

Reply via email to