1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Fix an assert() in pager.c that could fail in a concurrent transaction.

FossilOrigin-Name: 69394ddaa2bc9d26477b4359c676c598b733ac9f
This commit is contained in:
dan
2015-08-26 18:54:45 +00:00
parent de36c76a23
commit f6cf5ea790
5 changed files with 32 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
C Fix\sa\sproblem\sallowing\ssome\sconflicting\stransactions\sto\sbe\scommitted.
D 2015-08-26T18:02:20.162
C Fix\san\sassert()\sin\spager.c\sthat\scould\sfail\sin\sa\sconcurrent\stransaction.
D 2015-08-26T18:54:45.787
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in e2218eb228374422969de7b1680eda6864affcef
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -324,7 +324,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
F src/os_unix.c 388c023582b17890f10c980b30ec1922b471753b
F src/os_win.c 40b3af7a47eb1107d0d69e592bec345a3b7b798a
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
F src/pager.c 2e2559e64e825e39c033c0744237733cec70d636
F src/pager.c bb8e237a54d162a6cc22503f71895851dae9a0bb
F src/pager.h 1335b624cd540815c8c977172589d208d1c251a6
F src/parse.y 1e645cacb93979c59f2a510ee2c100e769bd5e3c
F src/pcache.c cde06aa50962595e412d497e22fd2e07878ba1f0
@@ -524,9 +524,9 @@ F test/collateA.test b8218ab90d1fa5c59dcf156efabb1b2599c580d6
F test/colmeta.test 2c765ea61ee37bc43bbe6d6047f89004e6508eb1
F test/colname.test 08948a4809d22817e0e5de89c7c0a8bd90cb551b
F test/concfault.test 500f17c3fcfe7705114422bcc6ddd3c740001a43
F test/concurrent.test ecf97fdcfb11dda1db52b2714d7d52d0922789f1
F test/concurrent.test 634b6a88f1942f5d68cc89d4d5efa2b11ba7913c
F test/concurrent2.test de43cd6703360dc6268907f1617f0d353d8a43c1
F test/concurrent3.test 8474b7ac80bc977bab4fe014c0b036c16779d8cb
F test/concurrent3.test 0a5f7e3036d1eccf0782d7153ac21f5f222e9468
F test/conflict.test 841bcf7cabbfca39c577eb8411ea8601843b46a8
F test/conflict2.test 0d3af4fb534fa1bd020c79960bb56e4d52655f09
F test/conflict3.test dec0634c0f31dec9a4b01c63063e939f0cd21b6b
@@ -1382,7 +1382,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 779b1d0e17bc54062b2b09cdbf94e9e2f4bae4f7
R 522c73a54721e2428308711f9566b92e
P a0566382d564ca17fd13475a44fed8f714742d97
R 82cb8297df85a5e2338dab90f8e6448e
U dan
Z 5afacf522fa16d68d46082708ed9d148
Z 29e210082fd7b7d5f83c5decd49ba489

View File

@@ -1 +1 @@
a0566382d564ca17fd13475a44fed8f714742d97
69394ddaa2bc9d26477b4359c676c598b733ac9f

View File

@@ -906,7 +906,7 @@ static int assert_pager_state(Pager *p){
if( !pagerUseWal(pPager) ){
assert( p->eLock>=RESERVED_LOCK );
}
assert( pPager->dbSize==pPager->dbOrigSize );
assert( pPager->dbSize==pPager->dbOrigSize || pPager->pAllRead );
assert( pPager->dbOrigSize==pPager->dbFileSize );
assert( pPager->dbOrigSize==pPager->dbHintSize );
assert( pPager->setMaster==0 );

View File

@@ -505,5 +505,26 @@ do_multiclient_test tn {
} {1234 5678 ok}
}
do_multiclient_test tn {
do_test 5.$tn.1 {
sql1 {
PRAGMA journal_mode = wal;
CREATE TABLE tt(a INTEGER PRIMARY KEY, b);
CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
INSERT INTO tt VALUES(1, randomblob(400));
BEGIN CONCURRENT;
}
} {wal}
do_test 5.$tn.2 {
sql1 { UPDATE t2 SET b=5 WHERE a=3 }
sql2 { INSERT INTO tt VALUES(2, randomblob(6000)) }
} {}
do_test 5.$tn.3 {
sql1 { COMMIT }
} {}
}
finish_test

View File

@@ -176,6 +176,7 @@ foreach {tn nRepeat oplist} {
3 100 { 1d 2i }
4 50 { 1d 2i 3d }
5 500 { 1i 2i 3i 4i }
6 500 { 1i 2d 3d 4d }
} {
if {[string range $oplist 0 0]=="-"} {
array unset rows
@@ -205,7 +206,6 @@ foreach {tn nRepeat oplist} {
}
foreach db $DBLIST {
if {$i==272 && $db=="db4"} breakpoint
set rc [catch { $db eval COMMIT } msg]
if {$rc} { $db eval ROLLBACK }
incr stats($db,$rc)