Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Avoid calling OsDelete() on journal files when they are opened for temporary databases. Fix for #2255. (CVS 3748) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e746832f5f3e1c58e6f6456866156824 |
User & Date: | danielk1977 2007-03-29 17:28:15.000 |
Context
2007-03-29
| ||
17:57 | Make sure the strftime() date conversions put in leading zeros correctly. Ticket #2276. (CVS 3749) (check-in: e853067ec4 user: drh tags: trunk) | |
17:28 | Avoid calling OsDelete() on journal files when they are opened for temporary databases. Fix for #2255. (CVS 3748) (check-in: e746832f5f user: danielk1977 tags: trunk) | |
17:07 | Add a couple of test cases to improve coverage testing. (CVS 3747) (check-in: 0b22ce3637 user: danielk1977 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.305 2007/03/29 17:28:15 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" #include "os.h" #include "pager.h" #include <assert.h> #include <string.h> |
︙ | ︙ | |||
937 938 939 940 941 942 943 | rc = sqlite3OsTruncate(pPager->jfd, 0); sqlite3OsSeek(pPager->jfd, 0); pPager->journalOff = 0; pPager->journalStarted = 0; }else{ sqlite3OsClose(&pPager->jfd); pPager->journalOpen = 0; | > > > > > > > > > | > | 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 | rc = sqlite3OsTruncate(pPager->jfd, 0); sqlite3OsSeek(pPager->jfd, 0); pPager->journalOff = 0; pPager->journalStarted = 0; }else{ sqlite3OsClose(&pPager->jfd); pPager->journalOpen = 0; /* 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; for(pPg=pPager->pAll; pPg; pPg=pPg->pNextAll){ pPg->inJournal = 0; pPg->dirty = 0; pPg->needSync = 0; |
︙ | ︙ | |||
2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 | ** possibly used for a transaction later on. On some systems, the ** OsTruncate() call used in exclusive-access mode also requires ** a read/write file handle. */ rc = SQLITE_BUSY; if( sqlite3OsFileExists(pPager->zJournal) ){ int ro; rc = sqlite3OsOpenReadWrite(pPager->zJournal, &pPager->jfd, &ro); if( ro ){ rc = SQLITE_BUSY; } } if( rc!=SQLITE_OK ){ pager_unlock(pPager); | > | 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 | ** possibly used for a transaction later on. On some systems, the ** OsTruncate() call used in exclusive-access mode also requires ** a read/write file handle. */ rc = SQLITE_BUSY; if( sqlite3OsFileExists(pPager->zJournal) ){ int ro; assert( !pPager->tempFile ); rc = sqlite3OsOpenReadWrite(pPager->zJournal, &pPager->jfd, &ro); if( ro ){ rc = SQLITE_BUSY; } } if( rc!=SQLITE_OK ){ pager_unlock(pPager); |
︙ | ︙ |
Changes to src/test9.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | ** ************************************************************************* ** ** This file contains obscure tests of the C-interface required ** for completeness. Test code is written in C for these cases ** as there is not much point in binding to Tcl. ** | | < | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | ** ************************************************************************* ** ** This file contains obscure tests of the C-interface required ** 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.2 2007/03/29 17:28:15 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> /* ** c_collation_test */ static int c_collation_test( ClientData clientData, /* Pointer to sqlite3_enable_XXX function */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */ ){ const char *zErrFunction = "N/A"; sqlite3 *db; int rc; if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; |
︙ | ︙ | |||
72 73 74 75 76 77 78 | Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */ ){ void *p; const char *zErrFunction = "N/A"; | < < | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */ ){ void *p; const char *zErrFunction = "N/A"; if( objc!=1 ){ Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } p = sqlite3_malloc(5); if( !p ){ |
︙ | ︙ |