Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Avoid calling sqlite3OsFetch() on a file-handle for which the xFetch method is NULL. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | ota-update |
Files: | files | file ages | folders |
SHA1: |
071f7f2decd2f786c0201a4219e9c2cc |
User & Date: | dan 2014-09-04 11:03:35.509 |
Context
2014-09-04
| ||
18:05 | Fix showwal.c so that it works with 64KiB pages. (check-in: fc4f7c1152 user: dan tags: ota-update) | |
11:03 | Avoid calling sqlite3OsFetch() on a file-handle for which the xFetch method is NULL. (check-in: 071f7f2dec user: dan tags: ota-update) | |
2014-09-03
| ||
19:30 | Split part of "PRAGMA ota_mode" off into "PRAGMA pager_ota_mode". This allows some specialized custom VFS implementations to intercept and implement the expected pager-related effects of this pragma. (check-in: 209f672e58 user: dan tags: ota-update) | |
Changes
Changes to ext/ota/ota.c.
︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | " and the program exits. Subsequent invocations of this (or any other OTA)\n" " application will use this state to resume applying the OTA update to the\n" " target db.\n" "\n" , zArgv0); exit(1); } int main(int argc, char **argv){ int i; const char *zTarget; /* Target database to apply OTA to */ const char *zOta; /* Database containing OTA */ char *zErrmsg; /* Error message, if any */ sqlite3ota *pOta; /* OTA handle */ | > > > > > | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | " and the program exits. Subsequent invocations of this (or any other OTA)\n" " application will use this state to resume applying the OTA update to the\n" " target db.\n" "\n" , zArgv0); exit(1); } void report_default_vfs(){ sqlite3_vfs *pVfs = sqlite3_vfs_find(0); fprintf(stdout, "using vfs \"%s\"\n", pVfs->zName); } int main(int argc, char **argv){ int i; const char *zTarget; /* Target database to apply OTA to */ const char *zOta; /* Database containing OTA */ char *zErrmsg; /* Error message, if any */ sqlite3ota *pOta; /* OTA handle */ |
︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 | if( nArg1>5 || nArg1<2 || memcmp("-step", argv[1], nArg1) ) usage(argv[0]); nStep = atoi(argv[2]); }else if( argc!=3 ){ usage(argv[0]); } zTarget = argv[argc-2]; zOta = argv[argc-1]; /* Open an OTA handle. If nStep is less than or equal to zero, call ** sqlite3ota_step() until either the OTA has been completely applied ** or an error occurs. Or, if nStep is greater than zero, call ** sqlite3ota_step() a maximum of nStep times. */ pOta = sqlite3ota_open(zTarget, zOta); for(i=0; (nStep<=0 || i<nStep) && sqlite3ota_step(pOta)==SQLITE_OK; i++); | > > | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | if( nArg1>5 || nArg1<2 || memcmp("-step", argv[1], nArg1) ) usage(argv[0]); nStep = atoi(argv[2]); }else if( argc!=3 ){ usage(argv[0]); } zTarget = argv[argc-2]; zOta = argv[argc-1]; report_default_vfs(); /* Open an OTA handle. If nStep is less than or equal to zero, call ** sqlite3ota_step() until either the OTA has been completely applied ** or an error occurs. Or, if nStep is greater than zero, call ** sqlite3ota_step() a maximum of nStep times. */ pOta = sqlite3ota_open(zTarget, zOta); for(i=0; (nStep<=0 || i<nStep) && sqlite3ota_step(pOta)==SQLITE_OK; i++); |
︙ | ︙ |
Changes to src/vdbesort.c.
︙ | ︙ | |||
597 598 599 600 601 602 603 | ** mmap), return SQLITE_OK and set *pp to NULL. ** ** Or, if an error occurs, return an SQLite error code. The final value of ** *pp is undefined in this case. */ static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){ int rc = SQLITE_OK; | | > > | 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 | ** mmap), return SQLITE_OK and set *pp to NULL. ** ** Or, if an error occurs, return an SQLite error code. The final value of ** *pp is undefined in this case. */ static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){ int rc = SQLITE_OK; if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) && pFile->pFd->pMethods->xFetch ){ rc = sqlite3OsFetch(pFile->pFd, 0, (int)pFile->iEof, (void**)pp); testcase( rc!=SQLITE_OK ); } return rc; } /* |
︙ | ︙ | |||
1119 1120 1121 1122 1123 1124 1125 | ** ** Whether or not the file does end up memory mapped of course depends on ** the specific VFS implementation. */ static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nByte){ if( nByte<=(i64)(db->nMaxSorterMmap) ){ int rc = sqlite3OsTruncate(pFd, nByte); | | | 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 | ** ** Whether or not the file does end up memory mapped of course depends on ** the specific VFS implementation. */ static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nByte){ if( nByte<=(i64)(db->nMaxSorterMmap) ){ int rc = sqlite3OsTruncate(pFd, nByte); if( rc==SQLITE_OK && pFd->pMethods->xFetch ){ void *p = 0; sqlite3OsFetch(pFd, 0, (int)nByte, &p); sqlite3OsUnfetch(pFd, 0, p); } } } #else |
︙ | ︙ |