Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Move error simulation code from the sqlite3_os_init() functions into a wrapper. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
67ad21abf88abb7a3e2eacddcaf1ab5d |
User & Date: | dan 2009-08-17 15:52:26.000 |
Context
2009-08-17
| ||
16:01 | Always call sqlite3_malloc() in sqlite3OsInit(), even when not compiled with SQLITE_TEST. (check-in: b98a8706a6 user: drh tags: trunk) | |
15:52 | Move error simulation code from the sqlite3_os_init() functions into a wrapper. (check-in: 67ad21abf8 user: dan tags: trunk) | |
15:31 | More documentation and comment updates for sqlite3_initialize/shutdown interface changes to handle failures. (check-in: 32509bc733 user: shane tags: trunk) | |
Changes
Changes to src/main.c.
︙ | ︙ | |||
163 164 165 166 167 168 169 | memset(pHash, 0, sizeof(sqlite3GlobalFunctions)); sqlite3RegisterGlobalFunctions(); if( sqlite3GlobalConfig.isPCacheInit==0 ){ rc = sqlite3PcacheInitialize(); } if( rc==SQLITE_OK ){ sqlite3GlobalConfig.isPCacheInit = 1; | | | 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | memset(pHash, 0, sizeof(sqlite3GlobalFunctions)); sqlite3RegisterGlobalFunctions(); if( sqlite3GlobalConfig.isPCacheInit==0 ){ rc = sqlite3PcacheInitialize(); } if( rc==SQLITE_OK ){ sqlite3GlobalConfig.isPCacheInit = 1; rc = sqlite3OsInit(); } if( rc==SQLITE_OK ){ sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage); sqlite3GlobalConfig.isInit = 1; } sqlite3GlobalConfig.inProgress = 0; |
︙ | ︙ |
Changes to src/os.c.
︙ | ︙ | |||
185 186 187 188 189 190 191 192 193 194 195 196 197 198 | int sqlite3OsCloseFree(sqlite3_file *pFile){ int rc = SQLITE_OK; assert( pFile ); rc = sqlite3OsClose(pFile); sqlite3_free(pFile); return rc; } /* ** The list of all registered VFS implementations. */ static sqlite3_vfs * SQLITE_WSD vfsList = 0; #define vfsList GLOBAL(sqlite3_vfs *, vfsList) | > > > > > > > > > > > | 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | int sqlite3OsCloseFree(sqlite3_file *pFile){ int rc = SQLITE_OK; assert( pFile ); rc = sqlite3OsClose(pFile); sqlite3_free(pFile); return rc; } /* ** This function is a wrapper around the OS specific implementation of ** sqlite3_os_init(). The purpose of the wrapper is to provide the ** ability to simulate a malloc failure, so that the handling of an ** error in sqlite3_os_init() by the upper layers can be tested. */ int sqlite3OsInit(void){ DO_OS_MALLOC_TEST(0); return sqlite3_os_init(); } /* ** The list of all registered VFS implementations. */ static sqlite3_vfs * SQLITE_WSD vfsList = 0; #define vfsList GLOBAL(sqlite3_vfs *, vfsList) |
︙ | ︙ |
Changes to src/os.h.
︙ | ︙ | |||
220 221 222 223 224 225 226 227 228 229 230 231 232 233 | ** */ #define PENDING_BYTE sqlite3PendingByte #define RESERVED_BYTE (PENDING_BYTE+1) #define SHARED_FIRST (PENDING_BYTE+2) #define SHARED_SIZE 510 /* ** Functions for accessing sqlite3_file methods */ int sqlite3OsClose(sqlite3_file*); int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset); int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset); int sqlite3OsTruncate(sqlite3_file*, i64 size); | > > > > > | 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | ** */ #define PENDING_BYTE sqlite3PendingByte #define RESERVED_BYTE (PENDING_BYTE+1) #define SHARED_FIRST (PENDING_BYTE+2) #define SHARED_SIZE 510 /* ** Wrapper around OS specific sqlite3_os_init() function. */ int sqlite3OsInit(void); /* ** Functions for accessing sqlite3_file methods */ int sqlite3OsClose(sqlite3_file*); int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset); int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset); int sqlite3OsTruncate(sqlite3_file*, i64 size); |
︙ | ︙ |
Changes to src/os_unix.c.
︙ | ︙ | |||
5122 5123 5124 5125 5126 5127 5128 | #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) UNIXVFS("unix-afp", afpIoFinder ), UNIXVFS("unix-proxy", proxyIoFinder ), #endif }; unsigned int i; /* Loop counter */ | < < < < < < < | 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 | #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) UNIXVFS("unix-afp", afpIoFinder ), UNIXVFS("unix-proxy", proxyIoFinder ), #endif }; unsigned int i; /* Loop counter */ /* Register all VFSes defined in the aVfs[] array */ for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ sqlite3_vfs_register(&aVfs[i], i==0); } return SQLITE_OK; } |
︙ | ︙ |
Changes to src/os_win.c.
︙ | ︙ | |||
1879 1880 1881 1882 1883 1884 1885 | winDlClose, /* xDlClose */ winRandomness, /* xRandomness */ winSleep, /* xSleep */ winCurrentTime, /* xCurrentTime */ winGetLastError /* xGetLastError */ }; | < < < < < < < | 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 | winDlClose, /* xDlClose */ winRandomness, /* xRandomness */ winSleep, /* xSleep */ winCurrentTime, /* xCurrentTime */ winGetLastError /* xGetLastError */ }; sqlite3_vfs_register(&winVfs, 1); return SQLITE_OK; } int sqlite3_os_end(void){ return SQLITE_OK; } |
︙ | ︙ |
Changes to src/test_init.c.
︙ | ︙ | |||
36 37 38 39 40 41 42 | int mem_init; /* True if mem subsystem is initalized */ int mem_fail; /* True to fail mem subsystem inialization */ int mutex_init; /* True if mutex subsystem is initalized */ int mutex_fail; /* True to fail mutex subsystem inialization */ int pcache_init; /* True if pcache subsystem is initalized */ int pcache_fail; /* True to fail pcache subsystem inialization */ | < | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | int mem_init; /* True if mem subsystem is initalized */ int mem_fail; /* True to fail mem subsystem inialization */ int mutex_init; /* True if mutex subsystem is initalized */ int mutex_fail; /* True to fail mutex subsystem inialization */ int pcache_init; /* True if pcache subsystem is initalized */ int pcache_fail; /* True to fail pcache subsystem inialization */ } wrapped; static int wrMemInit(void *pAppData){ int rc; if( wrapped.mem_fail ){ rc = SQLITE_ERROR; }else{ |
︙ | ︙ | |||
192 193 194 195 196 197 198 | char *z = Tcl_GetString(objv[i]); if( strcmp(z, "mem")==0 ){ wrapped.mem_fail = 1; }else if( strcmp(z, "mutex")==0 ){ wrapped.mutex_fail = 1; }else if( strcmp(z, "pcache")==0 ){ wrapped.pcache_fail = 1; | < < | 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | char *z = Tcl_GetString(objv[i]); if( strcmp(z, "mem")==0 ){ wrapped.mem_fail = 1; }else if( strcmp(z, "mutex")==0 ){ wrapped.mutex_fail = 1; }else if( strcmp(z, "pcache")==0 ){ wrapped.pcache_fail = 1; }else{ Tcl_AppendResult(interp, "Unknown argument: \"", z, "\""); return TCL_ERROR; } } return TCL_OK; } |
︙ | ︙ | |||
235 236 237 238 239 240 241 | Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } wrapped.mem_fail = 0; wrapped.mutex_fail = 0; wrapped.pcache_fail = 0; | < | 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } wrapped.mem_fail = 0; wrapped.mutex_fail = 0; wrapped.pcache_fail = 0; return TCL_OK; } static int init_wrapper_query( ClientData clientData, /* Unused */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ |
︙ | ︙ | |||
262 263 264 265 266 267 268 | } if( wrapped.mem_init ){ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj("mem", -1)); } if( wrapped.pcache_init ){ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj("pcache", -1)); } | < < < < < < < | 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | } if( wrapped.mem_init ){ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj("mem", -1)); } if( wrapped.pcache_init ){ Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj("pcache", -1)); } Tcl_SetObjResult(interp, pRet); return TCL_OK; } int Sqlitetest_init_Init(Tcl_Interp *interp){ static struct { char *zName; Tcl_ObjCmdProc *xProc; } aObjCmd[] = { {"init_wrapper_install", init_wrapper_install}, {"init_wrapper_query", init_wrapper_query }, |
︙ | ︙ |
Changes to test/init.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # set testdir [file dirname $argv0] source $testdir/tester.tcl db close foreach {t failed rc started} { | > > > > > | < | 1 2 3 4 5 6 7 8 9 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 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # This file implements regression tests for SQLite library. The # focus of this file is testing the effects of a failure in # sqlite3_initialize(). # # set testdir [file dirname $argv0] source $testdir/tester.tcl db close foreach {t failed rc started} { 1.1 {} SQLITE_OK {mutex mem pcache} 1.2 {mutex} SQLITE_ERROR {} 1.3 {mem} SQLITE_ERROR {mutex} 1.4 {pcache} SQLITE_ERROR {mutex mem} } { do_test init-$t.1 { eval init_wrapper_install $failed sqlite3_initialize } $rc do_test init-$t.2 { init_wrapper_query |
︙ | ︙ | |||
41 42 43 44 45 46 47 | } $started do_test init-$t.6 { init_wrapper_clear sqlite3_initialize } SQLITE_OK do_test init-$t.7 { init_wrapper_query | | > > > > > > > > > > > > > > > > > > > | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | } $started do_test init-$t.6 { init_wrapper_clear sqlite3_initialize } SQLITE_OK do_test init-$t.7 { init_wrapper_query } {mutex mem pcache} do_test init-$t.8 { init_wrapper_uninstall } {} } source $testdir/malloc_common.tcl if {$MEMDEBUG} { do_malloc_test init-2 -tclprep { db close init_wrapper_install } -tclbody { set rc [sqlite3_initialize] if {[string match "SQLITE*NOMEM" $rc]} {error "out of memory"} } -cleanup { set zRepeat "transient" if {$::iRepeat} {set zRepeat "persistent"} do_test init-2.$zRepeat.$::n.x { init_wrapper_clear sqlite3_initialize } SQLITE_OK init_wrapper_uninstall } } autoinstall_test_functions finish_test |