Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | If an attempt to get a read-lock on the WAL fails with SQLITE_BUSY_RECOVER, call the busy-handler at the btree level. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | wal-incr-ckpt |
Files: | files | file ages | folders |
SHA1: |
ce64496509a213c08c9dedae2a7a456b |
User & Date: | dan 2010-06-01 14:12:45.000 |
Context
2010-06-01
| ||
14:30 | Merge with [15abbc3416]. (Closed-Leaf check-in: f4b9003a2d user: dan tags: wal-incr-ckpt) | |
14:12 | If an attempt to get a read-lock on the WAL fails with SQLITE_BUSY_RECOVER, call the busy-handler at the btree level. (check-in: ce64496509 user: dan tags: wal-incr-ckpt) | |
13:17 | Fix a bug introduced by the previous check-in but only seen if SQLITE_ENABLE_EXPENSIVE_ASSERTS is turned on. (check-in: 9c9ec8994b user: drh tags: wal-incr-ckpt) | |
Changes
Changes to src/btree.c.
︙ | ︙ | |||
2542 2543 2544 2545 2546 2547 2548 | } } } if( rc!=SQLITE_OK ){ unlockBtreeIfUnused(pBt); } | | | 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 | } } } if( rc!=SQLITE_OK ){ unlockBtreeIfUnused(pBt); } }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && btreeInvokeBusyHandler(pBt) ); if( rc==SQLITE_OK ){ if( p->inTrans==TRANS_NONE ){ pBt->nTransaction++; #ifndef SQLITE_OMIT_SHARED_CACHE if( p->sharable ){ |
︙ | ︙ |
Changes to test/lock_common.tcl.
︙ | ︙ | |||
43 44 45 46 47 48 49 | return "ERROR: Child process hung up" } append r $line } } proc testfixture_nb_cb {varname chan} { | > > > > | > > | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | return "ERROR: Child process hung up" } append r $line } } proc testfixture_nb_cb {varname chan} { if {[eof $chan]} { append ::tfnb($chan) "ERROR: Child process hung up" set line "OVER" } else { set line [gets $chan] } if { $line == "OVER" } { set $varname $::tfnb($chan) unset ::tfnb($chan) close $chan } else { append ::tfnb($chan) $line } |
︙ | ︙ |
Changes to test/walthread.test.
︙ | ︙ | |||
280 281 282 283 284 285 286 287 288 289 290 291 292 293 | INSERT INTO t1 VALUES(randomblob(100)); INSERT INTO t1 VALUES(randomblob(100)); INSERT INTO t1 SELECT md5sum(x) FROM t1; COMMIT; } } set nRun 0 while {[tt_continue]} { read_transaction write_transaction incr nRun } set nRun | > > > > > > | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | INSERT INTO t1 VALUES(randomblob(100)); INSERT INTO t1 VALUES(randomblob(100)); INSERT INTO t1 SELECT md5sum(x) FROM t1; COMMIT; } } # Turn off auto-checkpoint. Otherwise, an auto-checkpoint run by a # writer may cause the dedicated checkpoint thread to return an # SQLITE_BUSY error. # db eval { PRAGMA wal_autocheckpoint = 0 } set nRun 0 while {[tt_continue]} { read_transaction write_transaction incr nRun } set nRun |
︙ | ︙ | |||
385 386 387 388 389 390 391 | INSERT INTO t1 VALUES(0, 0, 0); } } -thread t 10 { set nextwrite $E(pid) proc wal_hook {zDb nEntry} { | | > > > | 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 | INSERT INTO t1 VALUES(0, 0, 0); } } -thread t 10 { set nextwrite $E(pid) proc wal_hook {zDb nEntry} { if {$nEntry>10} { set rc [catch { db eval {PRAGMA wal_checkpoint} } msg] if {$rc && $msg != "database is locked"} { error $msg } } return 0 } db wal_hook wal_hook while {[tt_continue]} { set max 0 while { $max != ($nextwrite-1) && [tt_continue] } { |
︙ | ︙ |