]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix assertion faults in the COMMIT AND BEGIN path.
authordrh <>
Thu, 14 Nov 2024 19:59:02 +0000 (19:59 +0000)
committerdrh <>
Thu, 14 Nov 2024 19:59:02 +0000 (19:59 +0000)
FossilOrigin-Name: a9a4ac17c2169fa7f97434177dfb01eaf4fae7f99b9203677d985d048eea4559

manifest
manifest.uuid
src/vdbe.c

index 22b0f2281166ea1f7109d61c3b2c286d13c840af..ae64e33db627604c04972e60ae88359741f9d5a5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\smore\smakefile\senhancements\sfrom\strunk\sinto\sthe\scommit-and-begin\sbranch.
-D 2024-11-14T19:36:41.253
+C Fix\sassertion\sfaults\sin\sthe\sCOMMIT\sAND\sBEGIN\spath.
+D 2024-11-14T19:59:02.896
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
@@ -843,7 +843,7 @@ F src/upsert.c 215328c3f91623c520ec8672c44323553f12caeb4f01b1090ebdca99fdf7b4f1
 F src/utf.c 8b29d9a5956569ea2700f869669b8ef67a9662ee5e724ff77ab3c387e27094ba
 F src/util.c ceebf912f673247e305f16f97f0bb7285fca1d37413b79680714a553a9021d33
 F src/vacuum.c b763b6457bd058d2072ef9364832351fd8d11e8abf70cbb349657360f7d55c40
-F src/vdbe.c dd800b9c36d4d63cf2185cfb98cc7443321ea47b8d24bbe82a9e705d85989d82
+F src/vdbe.c f4cb87fa3c12ec151515731badeaa997defa071f677c0f2f2cb52c818a5762b6
 F src/vdbe.h c2549a215898a390de6669cfa32adba56f0d7e17ba5a7f7b14506d6fd5f0c36a
 F src/vdbeInt.h 2da01c73e8e3736a9015d5b04aa04d209bc9023d279d237d4d409205e921ea1e
 F src/vdbeapi.c 6353de05e8e78e497ccb33381ba5662ccc11c0339e5b1455faff01b6dacc3075
@@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b5dd11e0ac059573c2cc14640f0cd127a9f4c3d629023b21745f5442cb2de28a 81202d2ab5963fdcf20555b6d0b31cc955ac27f1cd87656faea5c0611c9a2ee8
-R 1e5c4f447532cf60ecddd07f5ef428a5
+P 098400d36140b90e1d6dab5f54b080568c633875916a1130b6627599b4f99469
+R 11a4595b2cb4390dbc018d3cf87a1735
 U drh
-Z 9bdfdb55a678363a84673d86e3e0775a
+Z 8f9b353dc1d070b10157323a5e0f6a11
 # Remove this line to create a well-formed Fossil manifest.
index 29f62a6298646b1e805336d7562c974736720a37..9f38d4748f0c850fae6c2b814e78030384a87d60 100644 (file)
@@ -1 +1 @@
-098400d36140b90e1d6dab5f54b080568c633875916a1130b6627599b4f99469
+a9a4ac17c2169fa7f97434177dfb01eaf4fae7f99b9203677d985d048eea4559
index 38b4d1c378ef7c62b6ecadf2273c99b5bf6ba3e4..374fd9f0a01ab591d030addd8a62c8211c4d48b9 100644 (file)
@@ -3948,7 +3948,8 @@ case OP_Savepoint: {
 ** shared cache.
 **
 ** If P3 is 1 or 2 and P1 is 1, then COMMIT but also start a new transaction
-** atomically.
+** atomically.  P3 is 1 to restart a read transaction or 2 to restart a write
+** transaction.
 */
 case OP_AutoCommit: {
   int desiredAutoCommit;
@@ -3966,7 +3967,7 @@ case OP_AutoCommit: {
       assert( desiredAutoCommit==1 );
       sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
       db->autoCommit = 1;
-    }else if( desiredAutoCommit && db->nVdbeWrite>0 ){
+    }else if( desiredAutoCommit && db->nVdbeWrite>(pOp->p3==2) ){
       /* If this instruction implements a COMMIT and other VMs are writing
       ** return an error indicating that the other VMs must complete first.
       */
@@ -3991,6 +3992,7 @@ case OP_AutoCommit: {
       if( pOp->p3 ){
         db->nVdbeActive++;
         db->nVdbeRead++;
+        if( pOp->p3==2 ) db->nVdbeWrite++;
         p->eVdbeState = VDBE_RUN_STATE;
         break;
       }