Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an obscure problem with recovery from I/O errors while rolling back. (CVS 6498) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
24ff486125b9ad62dd92314b62299093 |
User & Date: | drh 2009-04-11 16:27:50.000 |
Context
2009-04-11
| ||
19:09 | Fix malloc5.test so it work on both 64-bit and 32-bit systems. The ::tcl_platform(wordSize) variable has to be used to adjust some memory sizes. (CVS 6499) (check-in: ea20f78edb user: drh tags: trunk) | |
16:27 | Fix an obscure problem with recovery from I/O errors while rolling back. (CVS 6498) (check-in: 24ff486125 user: drh tags: trunk) | |
16:27 | Add a comments and an assert() to the virtual table implementation. No functional changes. (CVS 6497) (check-in: ac5d0c0aa1 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.580 2009/04/11 16:27:50 drh Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" /* ** Macros for troubleshooting. Normally turned off */ |
︙ | ︙ | |||
2020 2021 2022 2023 2024 2025 2026 | rc = pager_playback_one_page(pPager,1,isUnsync,&pPager->journalOff,0,0); if( rc!=SQLITE_OK ){ if( rc==SQLITE_DONE ){ rc = SQLITE_OK; pPager->journalOff = szJ; break; }else{ | | | > | < | 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 | rc = pager_playback_one_page(pPager,1,isUnsync,&pPager->journalOff,0,0); if( rc!=SQLITE_OK ){ if( rc==SQLITE_DONE ){ rc = SQLITE_OK; pPager->journalOff = szJ; break; }else{ /* If we are unable to rollback, quit and return the error ** code. This will cause the pager to enter the error state ** so that no further harm will be done. Perhaps the next ** process to come along will be able to rollback the database. */ goto end_playback; } } } } /*NOTREACHED*/ assert( 0 ); |
︙ | ︙ |
Changes to test/mallocC.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # # This file tests aspects of the malloc failure while parsing # CREATE TABLE statements in auto_vacuum mode. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # # This file tests aspects of the malloc failure while parsing # CREATE TABLE statements in auto_vacuum mode. # # $Id: mallocC.test,v 1.10 2009/04/11 16:27:50 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/malloc_common.tcl # Only run these tests if memory debugging is turned on. # |
︙ | ︙ | |||
83 84 85 86 87 88 89 90 91 92 93 94 95 96 | sqlite3_extended_result_codes db 1 execsql { PRAGMA auto_vacuum=1; CREATE TABLE t0(a, b, c); } do_mallocC_test 1 -sql { BEGIN; -- Allocate 32 new root pages. This will exercise the 'extract specific -- page from the freelist' code when in auto-vacuum mode (see the -- allocatePage() routine in btree.c). CREATE TABLE t1(a UNIQUE, b UNIQUE, c UNIQUE); CREATE TABLE t2(a UNIQUE, b UNIQUE, c UNIQUE); | > > > > > > > > > > > > > > > > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | sqlite3_extended_result_codes db 1 execsql { PRAGMA auto_vacuum=1; CREATE TABLE t0(a, b, c); } # The number of memory allocation failures is different on 64-bit # and 32-bit systems due to larger structures on 64-bit systems # overflowing the lookaside more often. To debug problems, it is # sometimes helpful to reduce the size of the lookaside allocation # blocks. But this is normally disabled. # if {0} { db close sqlite3_shutdown sqlite3_config_lookaside 50 500 sqlite3_initialize autoinstall_test_functions sqlite3 db test.db } do_mallocC_test 1 -sql { BEGIN; -- Allocate 32 new root pages. This will exercise the 'extract specific -- page from the freelist' code when in auto-vacuum mode (see the -- allocatePage() routine in btree.c). CREATE TABLE t1(a UNIQUE, b UNIQUE, c UNIQUE); CREATE TABLE t2(a UNIQUE, b UNIQUE, c UNIQUE); |
︙ | ︙ |