| Index: third_party/sqlite/src/test/ioerr5.test
|
| diff --git a/third_party/sqlite/src/test/ioerr5.test b/third_party/sqlite/src/test/ioerr5.test
|
| index 6e9014539f1c00385a0410a627c7ded6838bbf7a..a430f534074207047eaf7c8ad1af10adf1850173 100644
|
| --- a/third_party/sqlite/src/test/ioerr5.test
|
| +++ b/third_party/sqlite/src/test/ioerr5.test
|
| @@ -91,6 +91,15 @@ foreach locking_mode {normal exclusive} {
|
| INSERT INTO a VALUES(1, 'ABCDEFGHIJKLMNOP');
|
| }
|
| } {}
|
| +
|
| + # Open a read-only cursor on table "a". If the COMMIT below is
|
| + # interrupted by a persistent IO error, the pager will transition to
|
| + # PAGER_ERROR state. If there are no other read-only cursors open,
|
| + # from there the pager immediately discards all cached data and
|
| + # switches to PAGER_OPEN state. This read-only cursor stops that
|
| + # from happening, leaving the pager stuck in PAGER_ERROR state.
|
| + #
|
| + set channel [db incrblob -readonly a Name [db last_insert_rowid]]
|
|
|
| # Now try to commit the transaction. Cause an IO error to occur
|
| # within this operation, which moves the pager into the error state.
|
| @@ -118,25 +127,11 @@ foreach locking_mode {normal exclusive} {
|
| # with the dirty page.
|
| #
|
| do_test ioerr5-1.$locking_mode-$iFail.3 {
|
| - set bt [btree_from_db db]
|
| sqlite3_soft_heap_limit 1024
|
| compilesql16 "SELECT 10"
|
| - array set stats [btree_pager_stats $bt]
|
| -
|
| - # If the pager made it all the way to PAGER_SYNCED state, then
|
| - # both in-memory pages are clean. Following the calls to
|
| - # release_memory() that were made as part of the [compilesql16]
|
| - # above, there will be zero pages left in the cache.
|
| - #
|
| - # If the pager did not make it as far as PAGER_SYNCED, the two
|
| - # in memory pages are still dirty. So there will be 2 pages left
|
| - # in the cache following the release_memory() calls.
|
| - #
|
| - if {$stats(state)==5} {
|
| - set nPage 0
|
| - }
|
| - expr {$stats(page)==$nPage}
|
| - } {1}
|
| + } {SQLITE_OK}
|
| +
|
| + close $channel
|
|
|
| # Ensure that nothing was written to the database while reclaiming
|
| # memory from the pager in error state.
|
| @@ -148,7 +143,7 @@ foreach locking_mode {normal exclusive} {
|
| close $fd
|
| expr {$zDatabase eq $zDatabase2}
|
| } {1}
|
| -
|
| +
|
| if {$rc eq [list 0 {}]} {
|
| do_test ioerr5.1-$locking_mode-$iFail.3 {
|
| execsql { SELECT count(*) FROM a }
|
|
|