aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordan <dan@noemail.net>2020-05-07 14:26:40 +0000
committerdan <dan@noemail.net>2020-05-07 14:26:40 +0000
commit11a8182e5c6868a275531315c71f167a410ea86c (patch)
tree3c5a78b71ac03595f053039c91ef9ed48e477bb2
parent4cbe5d3588f671f96e917dab6c90d1e80707770a (diff)
downloadsqlite-11a8182e5c6868a275531315c71f167a410ea86c.tar.gz
sqlite-11a8182e5c6868a275531315c71f167a410ea86c.zip
Fix an error that could occur if the first transaction executed by a connection configured to use blocking locks is a write-transaction for which the WRITER lock cannot be obtained.
FossilOrigin-Name: 49e4dc72f7a4b28e4b49d7b91030bc986aea3ff44dac38cb6e68305800cd1de5
-rw-r--r--manifest14
-rw-r--r--manifest.uuid2
-rw-r--r--src/btree.c2
-rw-r--r--test/walsetlk.test17
4 files changed, 24 insertions, 11 deletions
diff --git a/manifest b/manifest
index 99b7c24f7..c9dbb5cb1 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\strunk\schanges\sinto\sthis\sbranch.
-D 2020-05-07T14:05:08.190
+C Fix\san\serror\sthat\scould\soccur\sif\sthe\sfirst\stransaction\sexecuted\sby\sa\sconnection\sconfigured\sto\suse\sblocking\slocks\sis\sa\swrite-transaction\sfor\swhich\sthe\sWRITER\slock\scannot\sbe\sobtained.
+D 2020-05-07T14:26:40.925
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -474,7 +474,7 @@ F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06
F src/backup.c b1c90cd4110248c8e1273ff4578d3a84c0c34725e1b96dacd4a6294a908702de
F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
-F src/btree.c d78458bf4cc0e33a7faa1ab9904ebd66c8a8c820d802b53c9d273b45b3dac667
+F src/btree.c f14e415fcfd0b52b4e4ebd193ba5fadac5e8252c30f023389af682813af44025
F src/btree.h 989ef3c33413549e3e148f3dcb46c030f317dac130dc86809ba6b9aa4b16c72a
F src/btreeInt.h 5c8b8749805787313ecf49eb5be3ced1e94bbf8ef54bb01470ce6bd0d5185c67
F src/build.c 5566b570435d3511a0fd57388c124491b1f74e59561f0c1679fabe74c4c54b7a
@@ -1689,7 +1689,7 @@ F test/walprotocol2.test 7d3b6b4bf0b12f8007121b1e6ef714bc99101fb3b48e46371df1db8
F test/walro.test cb438d05ba0d191f10b688e39c4f0cd5b71569a1d1f4440e5bdf3c6880e08c20
F test/walro2.test 0e79dd15cbdb4f482c01ea248373669c732414a726b357d04846a816afafb768
F test/walrofault.test c70cb6e308c443867701856cce92ad8288cd99488fa52afab77cca6cfd51af68
-F test/walsetlk.test 1d5628abc149c2c9d1fc4f5830d2540f02d9efad0ed815407d54035d23cd5df9
+F test/walsetlk.test 11f7fe792fdce54cf09874dab824e0627f2eedecfb9f7983e325606ec5184e0c
F test/walshared.test 0befc811dcf0b287efae21612304d15576e35417
F test/walslow.test c05c68d4dc2700a982f89133ce103a1a84cc285f
F test/walthread.test 14b20fcfa6ae152f5d8e12f5dc8a8a724b7ef189f5d8ef1e2ceab79f2af51747
@@ -1864,7 +1864,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3cfc675e2e917b69108feb3a75728b573abe8e44f0890a7d20d307b0b6784c0e 99749d4fd4930ccf15227f67c732266af9e09dd3cabdc0834fb450ef98196441
-R a2fb9be328819586780eac9a007a3fb6
+P ac4ee69664278a828e0a64c5be3b96fdb6eb6acc95646a9425c667aea328791c
+R 22b4478e3cf3c244a4ab3e6943ce3c12
U dan
-Z 26b45dc1c0a43ede219cdbbfa3466d04
+Z e85493d3ac63dab3b3e9ea5cdd9d6a6e
diff --git a/manifest.uuid b/manifest.uuid
index 6fa7b45d5..6f07e8c3d 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-ac4ee69664278a828e0a64c5be3b96fdb6eb6acc95646a9425c667aea328791c \ No newline at end of file
+49e4dc72f7a4b28e4b49d7b91030bc986aea3ff44dac38cb6e68305800cd1de5 \ No newline at end of file
diff --git a/src/btree.c b/src/btree.c
index 3fe0e1c3c..f269b3dee 100644
--- a/src/btree.c
+++ b/src/btree.c
@@ -3434,8 +3434,8 @@ int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){
pBt->btsFlags &= ~BTS_INITIALLY_EMPTY;
if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY;
- sqlite3PagerWalDb(pPager, p->db);
do {
+ sqlite3PagerWalDb(pPager, p->db);
#ifdef SQLITE_ENABLE_SETLK_TIMEOUT
/* If transitioning from no transaction directly to a write transaction,
diff --git a/test/walsetlk.test b/test/walsetlk.test
index b44412d9b..66513ad2d 100644
--- a/test/walsetlk.test
+++ b/test/walsetlk.test
@@ -78,7 +78,6 @@ db2 close
#-------------------------------------------------------------------------
do_multiclient_test tn {
-
do_test 2.$tn.1 {
sql1 {
PRAGMA journal_mode = wal;
@@ -175,11 +174,25 @@ do_multiclient_test tn {
do_test 2.$tn.14 {
set us [lindex [time { catch {db eval "PRAGMA wal_checkpoint=RESTART"} }] 0]
- puts $us
expr $us>1000000 && $us<4000000
} {1}
}
+#-------------------------------------------------------------------------
+reset_db
+sqlite3 db2 test.db
+db2 timeout 1000
+do_execsql_test 3.0 {
+ PRAGMA journal_mode = wal;
+ CREATE TABLE x1(x, y);
+ BEGIN;
+ INSERT INTO x1 VALUES(1, 2);
+} {wal}
+
+do_test 3.1 {
+ list [catch { db2 eval {BEGIN EXCLUSIVE} } msg] $msg
+} {1 {database is locked}}
+
finish_test