Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Partial fix for a bug in recovery from xStress failures in pcache. (CVS 5635) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
44193b92770062271711570d8532fa5a |
User & Date: | drh 2008-08-28 17:46:19.000 |
Context
2008-08-28
| ||
18:35 | Fix ioerr5.test so that it works with the new pcache module. (CVS 5636) (check-in: 83e6a75e7d user: danielk1977 tags: trunk) | |
17:46 | Partial fix for a bug in recovery from xStress failures in pcache. (CVS 5635) (check-in: 44193b9277 user: drh tags: trunk) | |
13:55 | Avoid using (clock seconds) in thread003.test. It is not available if testfixture is linked to tcl 8.5. (CVS 5634) (check-in: b606263d08 user: danielk1977 tags: trunk) | |
Changes
Changes to src/pcache.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file implements that page cache. ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2008 August 05 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file implements that page cache. ** ** @(#) $Id: pcache.c,v 1.23 2008/08/28 17:46:19 drh Exp $ */ #include "sqliteInt.h" /* ** A complete page cache is an instance of this structure. ** ** A cache may only be deleted by its owner and while holding the |
︙ | ︙ | |||
569 570 571 572 573 574 575 | for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pPrev); } if( pPg ){ int rc; pcacheExitMutex(); rc = pCache->xStress(pCache->pStress, pPg); pcacheEnterMutex(); | | | 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 | for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pPrev); } if( pPg ){ int rc; pcacheExitMutex(); rc = pCache->xStress(pCache->pStress, pPg); pcacheEnterMutex(); if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){ return rc; } } } /* If the global page limit has been reached, try to recycle a page. */ if( pCache->bPurgeable && pcache.nCurrentPage>=pcache.nMaxPage ){ |
︙ | ︙ |
Changes to test/tkt2409.test.
︙ | ︙ | |||
12 13 14 15 16 17 18 | # # This file implements tests to verify that ticket #2409 has been # fixed. More specifically, they verify that if SQLite cannot # obtain an EXCLUSIVE lock while trying to spill the cache during # any statement other than a COMMIT, an I/O error is returned instead # of SQLITE_BUSY. # | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # # This file implements tests to verify that ticket #2409 has been # fixed. More specifically, they verify that if SQLite cannot # obtain an EXCLUSIVE lock while trying to spill the cache during # any statement other than a COMMIT, an I/O error is returned instead # of SQLITE_BUSY. # # $Id: tkt2409.test,v 1.6 2008/08/28 17:46:19 drh Exp $ # Test Outline: # # tkt-2409-1.*: Cause a cache-spill during an INSERT that is within # a db transaction but does not start a statement transaction. # Verify that the transaction is automatically rolled back # and SQLITE_IOERR_BLOCKED is returned |
︙ | ︙ | |||
178 179 180 181 182 183 184 | # statement in which the "I/O error" occured did not open a statement # transaction, SQLite had no choice but to roll back the transaction. # do_test tkt2409-3.4 { unread_lock_db catchsql { ROLLBACK } } {0 {}} | | > | 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | # statement in which the "I/O error" occured did not open a statement # transaction, SQLite had no choice but to roll back the transaction. # do_test tkt2409-3.4 { unread_lock_db catchsql { ROLLBACK } } {0 {}} integrity_check tkt2409-3.5 expr {srand(1)} do_test tkt2409-4.1 { execsql { PRAGMA cache_size=20; DROP TABLE t1; CREATE TABLE t1 (x TEXT UNIQUE NOT NULL); } |
︙ | ︙ | |||
216 217 218 219 220 221 222 223 224 225 226 227 | # Check the integrity of the cache. # integrity_check tkt2409-4.3 do_test tkt2409-4.4 { catchsql { ROLLBACK } } {0 {}} unread_lock_db db2 close unset -nocomplain t1 finish_test | > | 217 218 219 220 221 222 223 224 225 226 227 228 229 | # Check the integrity of the cache. # integrity_check tkt2409-4.3 do_test tkt2409-4.4 { catchsql { ROLLBACK } } {0 {}} integrity_check tkt2409-4.5 unread_lock_db db2 close unset -nocomplain t1 finish_test |