diff options
author | danielk1977 <danielk1977@noemail.net> | 2006-01-11 14:09:31 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2006-01-11 14:09:31 +0000 |
commit | b82e7edae9c6f8b0c9f2f6745442b5663a55b51a (patch) | |
tree | c388bb764973fcc40e8812c26ed450e7288a9c45 /src/btree.c | |
parent | 003437a0a7563fddadb95d4103630da3a9d7f2ae (diff) | |
download | sqlite-b82e7edae9c6f8b0c9f2f6745442b5663a55b51a.tar.gz sqlite-b82e7edae9c6f8b0c9f2f6745442b5663a55b51a.zip |
Fix bugs caused by assuming that shared-schemas are initialized. (CVS 2917)
FossilOrigin-Name: 3970eb875d1830d35b3a70a7583a8ab6b238cad6
Diffstat (limited to 'src/btree.c')
-rw-r--r-- | src/btree.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/btree.c b/src/btree.c index daa45277a..b1bd141ed 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9,7 +9,7 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** $Id: btree.c,v 1.289 2006/01/10 13:58:48 drh Exp $ +** $Id: btree.c,v 1.290 2006/01/11 14:09:31 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** For a detailed discussion of BTrees, refer to @@ -1579,6 +1579,7 @@ int sqlite3BtreeOpen( return SQLITE_NOMEM; } for(pBt=pTsd->pBtree; pBt; pBt=pBt->pNext){ + assert( pBt->nRef>0 ); if( 0==strcmp(zFullPathname, sqlite3pager_filename(pBt->pPager)) ){ p->pBt = pBt; *ppBtree = p; @@ -6498,3 +6499,27 @@ int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){ #endif return rc; } + +#if defined(SQLITE_TEST) && !defined(NO_TCL) +#include <tcl.h> +int sqlite3_shared_cache_report( + void * clientData, + Tcl_Interp *interp, + int objc, + Tcl_Obj *CONST objv[] +){ + ThreadData *pTd = sqlite3ThreadData(); + if( pTd->useSharedData ){ + BtShared *pBt; + Tcl_Obj *pRet = Tcl_NewObj(); + for(pBt=pTd->pBtree; pBt; pBt=pBt->pNext){ + const char *zFile = sqlite3pager_filename(pBt->pPager); + Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj(zFile, -1)); + Tcl_ListObjAppendElement(interp, pRet, Tcl_NewIntObj(pBt->nRef)); + } + Tcl_SetObjResult(interp, pRet); + } + return TCL_OK; +} +#endif + |