From 1cc8c448b52a143d6be1bea2e1ff52ca7a857663 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 24 Aug 2007 16:08:29 +0000 Subject: [PATCH] Remove nRef and vfsMutex from the sqlite3_vfs structure. Omit the sqlite3_vfs_release() interface. Less memory allocated for a pager in the common case where the size of the pathname is less than MAX_PATH. (CVS 4287) FossilOrigin-Name: b8451da378179d43f25d9a014480c0f13dd1dc37 --- manifest | 30 +++++------ manifest.uuid | 2 +- src/main.c | 4 +- src/os.c | 24 --------- src/os_unix.c | 2 - src/os_win.c | 2 - src/pager.c | 137 ++++++++++++++++++++++++++++-------------------- src/sqlite.h.in | 34 ++++-------- src/test3.c | 3 +- src/test6.c | 3 -- test/pager.test | 6 +-- 11 files changed, 108 insertions(+), 139 deletions(-) diff --git a/manifest b/manifest index 90a6d3339c..c249aef7de 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Select\sthe\sdefault\spage\ssize\sfor\snew\sdatabases\sbased\son\sthe\ssector-size\sand\sIOCAP\sflags.\s(CVS\s4286) -D 2007-08-24T11:52:29 +C Remove\snRef\sand\svfsMutex\sfrom\sthe\ssqlite3_vfs\sstructure.\s\sOmit\sthe\nsqlite3_vfs_release()\sinterface.\s\sLess\smemory\sallocated\sfor\sa\spager\nin\sthe\scommon\scase\swhere\sthe\ssize\sof\sthe\spathname\sis\sless\sthan\sMAX_PATH.\s(CVS\s4287) +D 2007-08-24T16:08:29 F Makefile.in 0c0e53720f658c7a551046442dd7afba0b72bfbe F Makefile.linux-gcc 65241babba6faf1152bf86574477baab19190499 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -98,24 +98,24 @@ F src/journal.c 573911e274738b3fda813d4f0a6e319f8a9ecd36 F src/legacy.c 7e1b1c57694e49cbadf561e2a7d9cd984dc743b5 F src/limits.h 71ab25f17e35e0a9f3f6f234b8ed49cc56731d35 F src/loadext.c 8b31e2e0e961918fa045515459aee1c122d8c266 -F src/main.c 795ec066ce38908b5c35ca4353bb601d022e2275 +F src/main.c 58f71f9b0c583fbe74d13b6d3fdb509cac5871f3 F src/malloc.c d4282f50964ab1ca31f504c97b7cf2fdb4d4195d F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217 F src/mem1.c afe2fbf6d7e8247c6c9f69c1481358b1cad60c08 F src/mem2.c 1a2ca756a285b5365d667841508cc1f98938b8d8 F src/mutex.c 9cf641f556a4119ef90ed41b82f2d5647f81686e -F src/os.c 3b0d37208ea3ec9e1f913fbdeaf88841ed443b9d +F src/os.c a8ed3c495161475dbce255f7003144144fb425f1 F src/os.h 2bfbbad126a775e4d8c7d59eb4d9585a5fd7dfb5 F src/os_common.h a5c446d3b93f09f369d13bf217de4bed3437dd1c F src/os_os2.c 8769301bff502de642ad2634cedcb77d967ce199 F src/os_os2.h c3f7d0af7e3453d1d7aa81b06c0a56f5a226530b F src/os_test.c 49833426101f99aee4bb5f6a44b7c4b2029fda1c F src/os_test.h 903c93554c23d88f34f667f1979e4a1cee792af3 -F src/os_unix.c c45b20f868fab1178710ea2f1c8043ce706d3a99 +F src/os_unix.c 27b1fad58587bc949013a5a4df9fc20fce395648 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e -F src/os_win.c 1cb94dd33d38e01de82d77bef107c7f3323463ec +F src/os_win.c e2598a18dbcb70cba888cebd37fb46d1eaee82b1 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b -F src/pager.c 6c9622a14f9778efb575072737c7f68c1ab95fe2 +F src/pager.c f5c2a4e85b632faa7cd891c214f1cfd021c1ffa9 F src/pager.h 53087c6fb9db01aed17c7fd044662a27507e89b8 F src/parse.y 2d2ce439dc6184621fb0b86f4fc5aca7f391a590 F src/pragma.c 9b989506a1b7c8aecd6befb8235e2f57a4aba7e5 @@ -125,7 +125,7 @@ F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da F src/select.c 98c367bce3f38c5adfcc97de9ab5c79b0e5dc2b2 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96 F src/shell.c ac29402b538515fa4697282387be9c1205e6e9eb -F src/sqlite.h.in 09a5256ee80dfc7cb4353739f78e4267be323574 +F src/sqlite.h.in 22397464e1026437a755489c3eeb459346ae8749 F src/sqlite3ext.h 9a26028378c288af500d8b94ed079666fed5806b F src/sqliteInt.h ea7a14a33c0a03479d2d98ce9ac83fe5e7f4bb55 F src/sqliteLimit.h 1bcbbdfa856f8b71b561abb31edb864b0eca1d12 @@ -133,10 +133,10 @@ F src/table.c c725e47f6f3092b9a7b569fc58e408e2173ee008 F src/tclsqlite.c d76af53f45c9e9f7f7d39531fa4c7bee7d0adad6 F src/test1.c 8b20d1f05777ac480d3caf8d5f79ab7a543513fc F src/test2.c 4f742e99ed1bea5c14692f627bdb59a146f30504 -F src/test3.c a7d011c51d6b2e2a73c43983d5c2b731d69c74d7 +F src/test3.c 637824fa560f9a4ffcec6b262febb0f57f400487 F src/test4.c c2c0f5dc907f1346f5d4b65eb5799f11eb9e4071 F src/test5.c 3a6a5717a149d7ca2e6d14f5be72cf7555d54dc4 -F src/test6.c 37caea087882ecce1cbc6c83f9f1d457bd42b731 +F src/test6.c 7007b3941ade02f51242ae898b5b9646d2164773 F src/test7.c a9d509d0e9ad214b4772696f49f6e61be26213d1 F src/test8.c e6a543c8b248efe120ae33a6859fcd55dcf46a96 F src/test9.c b46c8fe02ac7cca1a7316436d8d38d50c66f4b2f @@ -368,7 +368,7 @@ F test/misc7.test a67af9620a510ce19f96ba69f3848228b7c62a73 F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33 F test/notnull.test 44d600f916b770def8b095a9962dbe3be5a70d82 F test/null.test 9503e1f63e959544c006d9f01709c5b5eab67d54 -F test/pager.test 6c644725db2a79528f67a6f3472b9c9ddee17f05 +F test/pager.test f07c06fef8e3b4964a9b337b751b56825a44d326 F test/pager2.test c025f91b75fe65e85febda64d9416428b8a5cab5 F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4 F test/pageropt.test 51e3c091bc2992f5098f7576e3594e1908988939 @@ -561,7 +561,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P eb6c98fc1097b327453d7e8ec8877101ea8187c3 -R 33f9af4f9be6e647c8b59a027b74b510 -U danielk1977 -Z ea44b5abf05f45dd9f144b230dd5f4ae +P 13dda2e8e879835c21e539ba3ff8f96face1af4c +R 9943ec857d44edaed5e279e84f17aaa5 +U drh +Z a0440ce84e84a78d112a7ad4d7f13668 diff --git a/manifest.uuid b/manifest.uuid index bafbd99a9f..599b3c2261 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -13dda2e8e879835c21e539ba3ff8f96face1af4c \ No newline at end of file +b8451da378179d43f25d9a014480c0f13dd1dc37 \ No newline at end of file diff --git a/src/main.c b/src/main.c index 7200532308..4054e2fc8a 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.397 2007/08/24 03:51:34 drh Exp $ +** $Id: main.c,v 1.398 2007/08/24 16:08:29 drh Exp $ */ #include "sqliteInt.h" #include @@ -220,7 +220,6 @@ int sqlite3_close(sqlite3 *db){ ** structure? */ sqlite3_free(db->aDb[1].pSchema); - sqlite3_vfs_release(db->pVfs); sqlite3_mutex_leave(db->mutex); sqlite3_mutex_free(db->mutex); sqlite3_free(db); @@ -1420,7 +1419,6 @@ int sqlite3_sleep(int ms){ ** API uses microseconds. Hence the 1000's. */ rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000); - sqlite3_vfs_release(pVfs); return rc; } diff --git a/src/os.c b/src/os.c index c0649c349a..f1d65ab6b2 100644 --- a/src/os.c +++ b/src/os.c @@ -199,34 +199,10 @@ sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){ if( zVfs==0 ) break; if( strcmp(zVfs, pVfs->zName)==0 ) break; } - if( pVfs ){ - pVfs->nRef++; - assert( pVfs->nRef==1 || pVfs->vfsMutex!=0 ); - assert( pVfs->nRef>1 || pVfs->vfsMutex==0 ); - if( pVfs->vfsMutex==0 ){ - pVfs->vfsMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); - } - } sqlite3_mutex_leave(mutex); return pVfs; } -/* -** Release a VFS once it is no longer needed. -*/ -int sqlite3_vfs_release(sqlite3_vfs *pVfs){ - sqlite3_mutex *mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER); - sqlite3_mutex_enter(mutex); - assert( pVfs->nRef>0 ); - pVfs->nRef--; - if( pVfs->nRef==0 && pVfs->vfsMutex ){ - sqlite3_mutex_free(pVfs->vfsMutex); - pVfs->vfsMutex = 0; - } - sqlite3_mutex_leave(mutex); - return SQLITE_OK; -} - /* ** Unlink a VFS from the linked list */ diff --git a/src/os_unix.c b/src/os_unix.c index 4287e23513..e9150f1df9 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2702,8 +2702,6 @@ sqlite3_vfs *sqlite3OsDefaultVfs(void){ 1, /* iVersion */ sizeof(unixFile), /* szOsFile */ MAX_PATHNAME, /* mxPathname */ - 0, /* nRef */ - 0, /* vfsMutex */ 0, /* pNext */ "unix", /* zName */ 0, /* pAppData */ diff --git a/src/os_win.c b/src/os_win.c index 6b6496d85a..f81faf16e0 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -1465,8 +1465,6 @@ sqlite3_vfs *sqlite3OsDefaultVfs(void){ 1, /* iVersion */ sizeof(winFile), /* szOsFile */ MAX_PATH, /* mxPathname */ - 0, /* nRef */ - 0, /* vfsMutex */ 0, /* pNext */ "win32", /* zName */ 0, /* pAppData */ diff --git a/src/pager.c b/src/pager.c index f479fe2e8b..11b0d2204a 100644 --- a/src/pager.c +++ b/src/pager.c @@ -18,7 +18,7 @@ ** file simultaneously, or one process from reading the database while ** another is writing. ** -** @(#) $Id: pager.c,v 1.374 2007/08/24 11:52:29 danielk1977 Exp $ +** @(#) $Id: pager.c,v 1.375 2007/08/24 16:08:29 drh Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" @@ -1857,7 +1857,7 @@ static int sqlite3PagerOpentemp( ** last page is released using sqlite3PagerUnref(). ** ** If zFilename is NULL then a randomly-named temporary file is created -** and +** and used as the file to be cached. The file will be deleted ** automatically when it is closed. ** ** If zFilename is ":memory:" then all information is held in cache. @@ -1881,19 +1881,46 @@ int sqlite3PagerOpen( int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; int noReadlock = (flags & PAGER_NO_READLOCK)!=0; int journalFileSize = sqlite3JournalSize(pVfs); - int nDefaultPage = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size. */ + int nDefaultPage = SQLITE_DEFAULT_PAGE_SIZE; + char *zPathname; + int nPathname; /* The default return is a NULL pointer */ *ppPager = 0; + /* Compute the full pathname */ + zPathname = sqlite3_malloc(pVfs->mxPathname+1); + if( zPathname==0 ){ + return SQLITE_NOMEM; + } + if( zFilename && zFilename[0] ){ +#ifndef SQLITE_OMIT_MEMORYDB + if( strcmp(zFilename,":memory:")==0 ){ + memDb = 1; + zPathname[0] = 0; + }else +#endif + { + rc = sqlite3OsFullPathname(pVfs, zFilename, zPathname); + if( rc!=SQLITE_OK ){ + sqlite3_free(zPathname); + return rc; + } + } + }else{ + zPathname[0] = 0; + } + nPathname = strlen(zPathname); + /* Allocate memory for the pager structure */ pPager = sqlite3MallocZero( sizeof(*pPager) + /* Pager structure */ journalFileSize + /* The journal file structure */ pVfs->szOsFile * 2 + /* The db and stmt journal files */ - pVfs->mxPathname * 3 + 30 /* zFilename, zDirectory, zJournal */ + nPathname * 3 + 30 /* zFilename, zDirectory, zJournal */ ); if( !pPager ){ + sqlite3_free(zPathname); return SQLITE_NOMEM; } pPtr = (u8 *)&pPager[1]; @@ -1901,64 +1928,58 @@ int sqlite3PagerOpen( pPager->stfd = (sqlite3_file*)&pPtr[pVfs->szOsFile*1]; pPager->jfd = (sqlite3_file*)&pPtr[pVfs->szOsFile*2]; pPager->zFilename = (char*)&pPtr[pVfs->szOsFile*2+journalFileSize]; - pPager->zDirectory = &pPager->zFilename[pVfs->mxPathname]; - pPager->zJournal = &pPager->zDirectory[pVfs->mxPathname]; + pPager->zDirectory = &pPager->zFilename[nPathname+1]; + pPager->zJournal = &pPager->zDirectory[nPathname+1]; pPager->pVfs = pVfs; + memcpy(pPager->zFilename, zPathname, nPathname+1); + sqlite3_free(zPathname); /* Open the pager file. */ - if( zFilename && zFilename[0] ){ -#ifndef SQLITE_OMIT_MEMORYDB - if( strcmp(zFilename,":memory:")==0 ){ - memDb = 1; - pPager->zFilename[0] = '\0'; - }else -#endif - { - rc = sqlite3OsFullPathname(pVfs, zFilename, pPager->zFilename); - if( rc==SQLITE_OK ){ - if( strlen(pPager->zFilename)>(pVfs->mxPathname - strlen("-journal")) ){ - rc = SQLITE_CANTOPEN; - }else{ - int oflag = - (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB); - int fout = 0; - rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, oflag, &fout); - readOnly = (fout&SQLITE_OPEN_READONLY); - - /* If the file was successfully opened for read/write access, - ** choose a default page size in case we have to create the - ** database file. The default page size is the maximum of: - ** - ** + SQLITE_DEFAULT_PAGE_SIZE, - ** + The value returned by sqlite3OsSectorSize() - ** + The largest page size that can be written atomically. - */ - if( rc==SQLITE_OK && !readOnly ){ - int iSectorSize = sqlite3OsSectorSize(pPager->fd); - if( nDefaultPagezFilename[0] ){ + if( nPathname>(pVfs->mxPathname - sizeof("-journal")) ){ + rc = SQLITE_CANTOPEN; + }else{ +/*** FIXME: Might need to be SQLITE_OPEN_TEMP_DB. Need to pass in +**** a flag from higher up. +****/ + int oflag = + (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB); + int fout = 0; + rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, oflag, &fout); + readOnly = (fout&SQLITE_OPEN_READONLY); + + /* If the file was successfully opened for read/write access, + ** choose a default page size in case we have to create the + ** database file. The default page size is the maximum of: + ** + ** + SQLITE_DEFAULT_PAGE_SIZE, + ** + The value returned by sqlite3OsSectorSize() + ** + The largest page size that can be written atomically. + */ + if( rc==SQLITE_OK && !readOnly ){ + int iSectorSize = sqlite3OsSectorSize(pPager->fd); + if( nDefaultPagefd); - int ii; - assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); - assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); - assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536); - for(ii=nDefaultPage; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){ - if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ) nDefaultPage = ii; - } - } -#endif - if( nDefaultPage>SQLITE_MAX_DEFAULT_PAGE_SIZE ){ - nDefaultPage = SQLITE_MAX_DEFAULT_PAGE_SIZE; - } + { + int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); + int ii; + assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); + assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); + assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536); + for(ii=nDefaultPage; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){ + if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ) nDefaultPage = ii; } } +#endif + if( nDefaultPage>SQLITE_MAX_DEFAULT_PAGE_SIZE ){ + nDefaultPage = SQLITE_MAX_DEFAULT_PAGE_SIZE; + } } } - }else{ + }else if( !memDb ){ /* If a temporary file is requested, it is not opened immediately. ** In this case we accept the default page size and delay actually ** opening the file until the first call to OsWrite(). @@ -1986,13 +2007,13 @@ int sqlite3PagerOpen( IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename)) /* Fill in Pager.zDirectory[] */ - memcpy(pPager->zDirectory, pPager->zFilename, pVfs->mxPathname); + memcpy(pPager->zDirectory, pPager->zFilename, nPathname+1); for(i=strlen(pPager->zDirectory); i>0 && pPager->zDirectory[i-1]!='/'; i--){} if( i>0 ) pPager->zDirectory[i-1] = 0; /* Fill in Pager.zJournal[] */ - memcpy(pPager->zJournal, pPager->zFilename, pVfs->mxPathname); - memcpy(&pPager->zJournal[strlen(pPager->zJournal)], "-journal", 9); + memcpy(pPager->zJournal, pPager->zFilename, nPathname); + memcpy(&pPager->zJournal[nPathname], "-journal", 9); /* pPager->journalOpen = 0; */ pPager->useJournal = useJournal && !memDb; @@ -2007,8 +2028,8 @@ int sqlite3PagerOpen( /* pPager->nPage = 0; */ pPager->mxPage = 100; pPager->mxPgno = SQLITE_MAX_PAGE_COUNT; - assert( PAGER_UNLOCK==0 ); /* pPager->state = PAGER_UNLOCK; */ + assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) ); /* pPager->errMask = 0; */ pPager->tempFile = tempFile; assert( tempFile==PAGER_LOCKINGMODE_NORMAL @@ -4317,7 +4338,7 @@ int sqlite3PagerCommitPhaseOne(Pager *pPager, const char *zMaster, Pgno nTrunc){ pPager->pDirty = 0; /* Sync the database file. */ - if( !pPager->noSync ){ + if( !pPager->noSync ){ rc = sqlite3OsSync(pPager->fd, pPager->sync_flags); } IOTRACE(("DBSYNC %p\n", pPager)) diff --git a/src/sqlite.h.in b/src/sqlite.h.in index bd813a222b..1b68a87ab7 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -30,7 +30,7 @@ ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. ** -** @(#) $Id: sqlite.h.in,v 1.239 2007/08/24 03:51:34 drh Exp $ +** @(#) $Id: sqlite.h.in,v 1.240 2007/08/24 16:08:29 drh Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -535,28 +535,18 @@ typedef struct sqlite3_mutex sqlite3_mutex; ** structure used by this VFS. mxPathname is the maximum length of ** a pathname in this VFS. ** -** The nRef field is incremented and decremented by SQLite to keep -** count of the number of users of the VFS. This field and -** vfsMutex, pNext, and pPrev are the only fields in the sqlite3_vfs -** structure that SQLite will ever modify. SQLite will only access -** or modify these fields while holding a particular static mutex. -** The application should never modify any fields of the sqlite3_vfs -** object once the object has been registered. -** -** The sqlite3_vfs.vfsMutex is a mutex used by the OS interface. -** It should initially be NULL. SQLite will initialize this field -** using sqlite3_mutex_alloc() upon first use of the adaptor -** by sqlite3_open_v2() and will deallocate the mutex when the -** last user closes. In other words, vfsMutex will be allocated -** when nRef transitions from 0 to 1 and will be deallocated when -** nRef transitions from 1 to 0. -** ** Registered vfs modules are kept on a linked list formed by ** the pNext pointer. The [sqlite3_register_vfs()] ** and [sqlite3_unregister_vfs()] interfaces manage this list ** in a thread-safe way. The [sqlite3_find_vfs()] interface ** searches the list. ** +** The pNext field is the only fields in the sqlite3_vfs +** structure that SQLite will ever modify. SQLite will only access +** or modify this field while holding a particular static mutex. +** The application should never modify anything within the sqlite3_vfs +** object once the object has been registered. +** ** The zName field holds the name of the VFS module. The name must ** be unique across all VFS modules. ** @@ -639,11 +629,9 @@ struct sqlite3_vfs { int iVersion; /* Structure version number */ int szOsFile; /* Size of subclassed sqlite3_file */ int mxPathname; /* Maximum file pathname length */ - int nRef; /* Number of references to this structure */ - sqlite3_mutex *vfsMutex; /* A mutex for this VFS */ sqlite3_vfs *pNext; /* Next registered VFS */ const char *zName; /* Name of this virtual file system */ - void *pAppData; /* Application context */ + void *pAppData; /* Pointer to application-specific data */ int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*, int flags, int *pOutFlags); int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir); @@ -3213,10 +3201,7 @@ int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); ** The sqlite3_vfs_find() interface returns a pointer to a VFS given its ** name. Names are case sensitive. If there is no match, a NULL ** pointer is returned. If zVfsName is NULL then the default -** VFS is returned. If a valid VFS pointer is returned, its -** vfsMutex field will have been initialized and nRef will be -** greater than zero. The sqlite3_vfs_release() function should -** be used to release the VFS when it is no longer needed. +** VFS is returned. ** ** New VFSes are registered with sqlite3_vfs_register(). Each ** new VFS becomes the default VFS if the makeDflt flag is set. @@ -3229,7 +3214,6 @@ int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset); ** the default. The choice for the new VFS is arbitrary. */ sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName); -int sqlite3_vfs_release(sqlite3_vfs*); int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt); int sqlite3_vfs_unregister(sqlite3_vfs*); diff --git a/src/test3.c b/src/test3.c index a98d658e18..fcfa37caf8 100644 --- a/src/test3.c +++ b/src/test3.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test3.c,v 1.81 2007/08/22 02:56:44 drh Exp $ +** $Id: test3.c,v 1.82 2007/08/24 16:08:29 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -120,7 +120,6 @@ static int btree_close( sqlite3_mutex_leave(sDb.mutex); sqlite3_mutex_free(sDb.mutex); sDb.mutex = 0; - sqlite3_vfs_release(sDb.pVfs); sDb.pVfs = 0; } return TCL_OK; diff --git a/src/test6.c b/src/test6.c index f32acab267..860e8730d2 100644 --- a/src/test6.c +++ b/src/test6.c @@ -722,8 +722,6 @@ static int crashParamsObjCmd( 1, /* iVersion */ 0, /* szOsFile */ 0, /* mxPathname */ - 0, /* nRef */ - 0, /* vfsMutex */ 0, /* pNext */ "crash", /* zName */ 0, /* pAppData */ @@ -751,7 +749,6 @@ static int crashParamsObjCmd( crashVfs.mxPathname = pOriginalVfs->mxPathname; crashVfs.pAppData = (void *)pOriginalVfs; crashVfs.szOsFile = sizeof(CrashFile) + pOriginalVfs->szOsFile; - sqlite3_vfs_release(pOriginalVfs); /* sqlite3_vfs_unregister(pOriginalVfs); */ sqlite3_vfs_register(&crashVfs, 1); } diff --git a/test/pager.test b/test/pager.test index 2bb211e043..8ffa082858 100644 --- a/test/pager.test +++ b/test/pager.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is page cache subsystem. # -# $Id: pager.test,v 1.28 2007/04/05 17:15:53 danielk1977 Exp $ +# $Id: pager.test,v 1.29 2007/08/24 16:08:29 drh Exp $ set testdir [file dirname $argv0] @@ -409,6 +409,7 @@ do_test pager-4.6.1 { # Test truncate on an in-memory database is Ok. ifcapable memorydb { do_test pager-4.6.2 { +btree_breakpoint set ::p2 [pager_open :memory: 10] pager_truncate $::p2 5 } {} @@ -569,6 +570,3 @@ do_test pager-6.5 { } {} } finish_test - - -