Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a memory leak in test_journal.c (test code). Also remove function pager_truncate_cache(), a wrapper around sqlite3PCacheTruncate(), from pager.c. (CVS 6118) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a64f3db0b39af53c8d8f80c242baa8aa |
User & Date: | danielk1977 2009-01-06 14:34:35.000 |
Context
2009-01-06
| ||
14:50 | Update permutations.test so that it does not show an error when running the singlethread and multithread test cases on THREADSAFE=0 builds. (CVS 6119) (check-in: 301b57b7ba user: drh tags: trunk) | |
14:34 | Fix a memory leak in test_journal.c (test code). Also remove function pager_truncate_cache(), a wrapper around sqlite3PCacheTruncate(), from pager.c. (CVS 6118) (check-in: a64f3db0b3 user: danielk1977 tags: trunk) | |
14:19 | Fix compiler warnings. (CVS 6117) (check-in: da770a8dff 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.531 2009/01/06 14:34:35 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" /* ** Macros for troubleshooting. Normally turned off */ |
︙ | ︙ | |||
1255 1256 1257 1258 1259 1260 1261 | /* If this is a rollback of a savepoint and data was not written to ** the database and the page is not in-memory, there is a potential ** problem. When the page is next fetched by the b-tree layer, it ** will be read from the database file, which may or may not be ** current. ** ** There are a couple of different ways this can happen. All are quite | | | 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 | /* If this is a rollback of a savepoint and data was not written to ** the database and the page is not in-memory, there is a potential ** problem. When the page is next fetched by the b-tree layer, it ** will be read from the database file, which may or may not be ** current. ** ** There are a couple of different ways this can happen. All are quite ** obscure. When running in synchronous mode, this can only happen ** if the page is on the free-list at the start of the transaction, then ** populated, then moved using sqlite3PagerMovepage(). ** ** The solution is to add an in-memory page to the cache containing ** the data just read from the sub-journal. Mark the page as dirty ** and if the pager requires a journal-sync, then mark the page as ** requiring a journal-sync before it is written. |
︙ | ︙ | |||
1428 1429 1430 1431 1432 1433 1434 | sqlite3OsClose(pMaster); } sqlite3_free(pMaster); return rc; } | < < | 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 | sqlite3OsClose(pMaster); } sqlite3_free(pMaster); return rc; } /* ** Truncate the main file of the given pager to the number of pages ** indicated. Also truncate the cached representation of the file. ** ** Might might be the case that the file on disk is smaller than nPage. ** This can happen, for example, if we are in the middle of a transaction ** which has extended the file size and the new pages are still all held |
︙ | ︙ | |||
1462 1463 1464 1465 1466 1467 1468 | if( rc==SQLITE_OK ){ pPager->dbFileSize = nPage; } } } if( rc==SQLITE_OK ){ pPager->dbSize = nPage; | | | 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 | if( rc==SQLITE_OK ){ pPager->dbFileSize = nPage; } } } if( rc==SQLITE_OK ){ pPager->dbSize = nPage; sqlite3PcacheTruncate(pPager->pPCache, nPage); } return rc; } /* ** Set the sectorSize for the given pager. ** |
︙ | ︙ | |||
2240 2241 2242 2243 2244 2245 2246 | } /* ** Forward declaration */ static int syncJournal(Pager*); | < < < < < < < < < < < < < < < < | 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 | } /* ** Forward declaration */ static int syncJournal(Pager*); /* ** Try to obtain a lock on a file. Invoke the busy callback if the lock ** is currently not available. Repeat until the busy callback returns ** false or until the lock succeeds. ** ** Return SQLITE_OK on success and an error code if we cannot obtain ** the lock. |
︙ | ︙ |
Changes to src/test_journal.c.
︙ | ︙ | |||
15 16 17 18 19 20 21 | ** bug in SQLite - writing data to a database file page when: ** ** a) the original page data is not stored in a synced portion of the ** journal file, and ** b) the page was not a free-list leaf page when the transaction was ** first opened. ** | | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | ** bug in SQLite - writing data to a database file page when: ** ** a) the original page data is not stored in a synced portion of the ** journal file, and ** b) the page was not a free-list leaf page when the transaction was ** first opened. ** ** $Id: test_journal.c,v 1.5 2009/01/06 14:34:35 danielk1977 Exp $ */ #if SQLITE_TEST /* This file is used for testing only */ #include "sqlite3.h" #include "sqliteInt.h" /* |
︙ | ︙ | |||
142 143 144 145 146 147 148 149 150 151 152 153 154 155 | /* ** Close an jt-file. */ static int jtClose(sqlite3_file *pFile){ jt_file **pp; jt_file *p = (jt_file *)pFile; if( p->zName ){ for(pp=&g.pList; *pp!=p; pp=&(*pp)->pNext); *pp = p->pNext; } return sqlite3OsClose(p->pReal); } | > | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | /* ** Close an jt-file. */ static int jtClose(sqlite3_file *pFile){ jt_file **pp; jt_file *p = (jt_file *)pFile; closeTransaction(p); if( p->zName ){ for(pp=&g.pList; *pp!=p; pp=&(*pp)->pNext); *pp = p->pNext; } return sqlite3OsClose(p->pReal); } |
︙ | ︙ |