Avoid calling OsDelete() on journal files when they are opened for temporary databases. Fix for #2255. (CVS 3748)

FossilOrigin-Name: e746832f5f3e1c58e6f6456866156824d23dd846
This commit is contained in:
danielk1977 2007-03-29 17:28:14 +00:00
parent 69b637b56b
commit 7152de8dd2
4 changed files with 22 additions and 14 deletions

View File

@ -1,5 +1,5 @@
C Add\sa\scouple\sof\stest\scases\sto\simprove\scoverage\stesting.\s(CVS\s3747)
D 2007-03-29T17:07:53
C Avoid\scalling\sOsDelete()\son\sjournal\sfiles\swhen\sthey\sare\sopened\sfor\stemporary\sdatabases.\sFix\sfor\s#2255.\s(CVS\s3748)
D 2007-03-29T17:28:15
F Makefile.in 2f2c3bf69faf0ae7b8e8af4f94f1986849034530
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@ -86,7 +86,7 @@ F src/os_unix.c 0d91b28d57c0885fe97fb9020fd1091578066b5b
F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
F src/os_win.c 84c02837a6ec216a07e83a1d10d5a01c417bb489
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
F src/pager.c 1a881105a207af5526851fdc6bf57f020cbcbb88
F src/pager.c 9a6eefc192e3922c27bc0b18914b45dc9c348ffb
F src/pager.h f1b17bf848b3dce5d9afb2701186d3c9a8826f8c
F src/parse.y 207ab04273ae13aa4a729b96008d294d5f334ab3
F src/pragma.c 9cb8b94e7d38ba35a86037bd517d07ba9870b4b2
@ -109,7 +109,7 @@ F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f
F src/test6.c 5957d249d437e4db74045ce2f1f661648d94bf94
F src/test7.c 03fa8d787f6aebc6d1f72504d52f33013ad2c8e3
F src/test8.c 628ec89f9fbf3bfb9c58a503d845a0719595d0ad
F src/test9.c ba1c39ce4301673653c31a4a31c2ba634dc04ac4
F src/test9.c cb1a7b5a4a918bb0552fd0101fd3f88d85904cd2
F src/test_async.c 9d326ceda4306bcab252b8f7e8e480ed45d7ccb6
F src/test_autoext.c 855157d97aa28cf84233847548bfacda21807436
F src/test_loadext.c 22065d601a18878e5542191001f0eaa5d77c0ed8
@ -446,7 +446,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P f6c3abdc6c5e916e5366ba28fb1cd06ca3554303
R 510e38c64873ba345896fd1daf2242a2
P 0b22ce3637f87c453084c5bd994b6b19a0b014c0
R 2ce4cb24cdac809fb310981214060097
U danielk1977
Z f759617c0297932d47953cae5b14ea24
Z 3b8a362b924d1b973dfb32cc84cc10b1

View File

@ -1 +1 @@
0b22ce3637f87c453084c5bd994b6b19a0b014c0
e746832f5f3e1c58e6f6456866156824d23dd846

View File

@ -18,7 +18,7 @@
** file simultaneously, or one process from reading the database while
** another is writing.
**
** @(#) $Id: pager.c,v 1.304 2007/03/28 01:59:34 drh Exp $
** @(#) $Id: pager.c,v 1.305 2007/03/29 17:28:15 danielk1977 Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"
@ -941,7 +941,17 @@ static int pager_unwritelock(Pager *pPager){
}else{
sqlite3OsClose(&pPager->jfd);
pPager->journalOpen = 0;
rc = sqlite3OsDelete(pPager->zJournal);
/* If this is a temporary pager file, then the journal file should
** have been configured as delete-on-close. Otherwise, it should still
** be in the file system. This pager still holds a RESERVED or greater
** lock on the database file, so there is no chance another process
** could create or remove a journal file.
*/
assert( sqlite3OsFileExists(pPager->zJournal) || pPager->tempFile );
assert( !sqlite3OsFileExists(pPager->zJournal) || !pPager->tempFile );
if( !pPager->tempFile ){
rc = sqlite3OsDelete(pPager->zJournal);
}
}
sqliteFree( pPager->aInJournal );
pPager->aInJournal = 0;
@ -2714,6 +2724,7 @@ static int pagerSharedLock(Pager *pPager){
rc = SQLITE_BUSY;
if( sqlite3OsFileExists(pPager->zJournal) ){
int ro;
assert( !pPager->tempFile );
rc = sqlite3OsOpenReadWrite(pPager->zJournal, &pPager->jfd, &ro);
if( ro ){
rc = SQLITE_BUSY;

View File

@ -14,7 +14,7 @@
** for completeness. Test code is written in C for these cases
** as there is not much point in binding to Tcl.
**
** $Id: test9.c,v 1.1 2007/03/29 12:24:17 danielk1977 Exp $
** $Id: test9.c,v 1.2 2007/03/29 17:28:15 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
@ -31,7 +31,6 @@ static int c_collation_test(
int objc, /* Number of arguments */
Tcl_Obj *CONST objv[] /* Command arguments */
){
void *p;
const char *zErrFunction = "N/A";
sqlite3 *db;
@ -76,8 +75,6 @@ static int c_realloc_test(
void *p;
const char *zErrFunction = "N/A";
sqlite3 *db;
int rc;
if( objc!=1 ){
Tcl_WrongNumArgs(interp, 1, objv, "");
return TCL_ERROR;