Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug that was preventing SQLite from releasing locks properly under obscure circumstances. (CVS 6192) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
502c66df8b5fc5ec8e3d94202030571a |
User & Date: | danielk1977 2009-01-17 16:59:41.000 |
Context
2009-01-19
| ||
17:40 | Make sure mutexes are fully enabled for thread001.test. Take steps to ensure that the thread tests run during regression testing. (CVS 6193) (check-in: 6242f113eb user: drh tags: trunk) | |
2009-01-17
| ||
16:59 | Fix a bug that was preventing SQLite from releasing locks properly under obscure circumstances. (CVS 6192) (check-in: 502c66df8b user: danielk1977 tags: trunk) | |
15:53 | Back out the Makefile.in changes from check-in (6181) because of reports (ticket #3594) that they do not work on NetBSD. Separately, documentation is updated to make clear that configure and Makefile.in are unsupported. (CVS 6191) (check-in: 2d79aaab13 user: drh tags: trunk) | |
Changes
Changes to src/pager.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** | | | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ** The pager is used to access a database disk file. It implements ** atomic commit and rollback through the use of a journal file that ** is separate from the database file. The pager also implements file ** locking to prevent two processes from writing the same database ** file simultaneously, or one process from reading the database while ** another is writing. ** ** @(#) $Id: pager.c,v 1.555 2009/01/17 16:59:41 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" /* ** Macros for troubleshooting. Normally turned off */ |
︙ | ︙ | |||
4072 4073 4074 4075 4076 4077 4078 | if( pPager->errCode ){ return pPager->errCode; } if( pPager->state<PAGER_RESERVED ){ return SQLITE_ERROR; } | | | | | 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 | if( pPager->errCode ){ return pPager->errCode; } if( pPager->state<PAGER_RESERVED ){ return SQLITE_ERROR; } if( pPager->dbModified==0 && pPager->exclusiveMode && pPager->journalMode==PAGER_JOURNALMODE_PERSIST ){ assert( pPager->dirtyCache==0 || pPager->journalOpen==0 ); return SQLITE_OK; } PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); assert( pPager->state==PAGER_SYNCED || MEMDB || !pPager->dirtyCache ); rc = pager_end_transaction(pPager, pPager->setMaster); rc = pager_error(pPager, rc); |
︙ | ︙ |
Changes to test/lock.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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 regression tests for SQLite library. The # focus of this script is database locks. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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 regression tests for SQLite library. The # focus of this script is database locks. # # $Id: lock.test,v 1.36 2009/01/17 16:59:41 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create an alternative connection to the database # |
︙ | ︙ | |||
385 386 387 388 389 390 391 392 393 394 395 396 397 | do_test lock-6.4 { execsql { PRAGMA integrity_check } db2 } {ok} do_test lock-6.5 { sqlite3_finalize $STMT } {SQLITE_OK} do_test lock-999.1 { rename db2 {} } {} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | do_test lock-6.4 { execsql { PRAGMA integrity_check } db2 } {ok} do_test lock-6.5 { sqlite3_finalize $STMT } {SQLITE_OK} # At one point the following set of conditions would cause SQLite to # retain a RESERVED or EXCLUSIVE lock after the transaction was committed: # # * The journal-mode is set to something other than 'delete', and # * there exists one or more active read-only statements, and # * a transaction that modified zero database pages is committed. # do_test lock-7.1 { set STMT [sqlite3_prepare $DB "SELECT * FROM sqlite_master" -1 TAIL] sqlite3_step $STMT } {SQLITE_ROW} do_test lock-7.2 { execsql { PRAGMA lock_status } } {main shared temp unlocked} do_test lock-7.3 { execsql { PRAGMA journal_mode = truncate; BEGIN; UPDATE t4 SET a = 10 WHERE 0; COMMIT; } execsql { PRAGMA lock_status } } {main shared temp unlocked} do_test lock-7.4 { sqlite3_finalize $STMT } {SQLITE_OK} do_test lock-999.1 { rename db2 {} } {} finish_test |