diff options
author | danielk1977 <danielk1977@noemail.net> | 2008-05-09 16:57:50 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2008-05-09 16:57:50 +0000 |
commit | 93f7af97a6b58480acccf78901dfff84ee01cc0d (patch) | |
tree | cee40572405b2fc2f2bf632a9482e14205e49fc1 /src/btree.c | |
parent | 7297d1f07058da3e3d6693ce4f4ade1f9bbdbcfd (diff) | |
download | sqlite-93f7af97a6b58480acccf78901dfff84ee01cc0d.tar.gz sqlite-93f7af97a6b58480acccf78901dfff84ee01cc0d.zip |
Fix a problem with recovering from an IO error in exclusive-locking mode. (CVS 5112)
FossilOrigin-Name: 7a44fb965b3477fb78901939ba35d569e5638c19
Diffstat (limited to 'src/btree.c')
-rw-r--r-- | src/btree.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/btree.c b/src/btree.c index d87eb040f..2f8c6ed3d 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.457 2008/05/07 19:11:03 danielk1977 Exp $ +** $Id: btree.c,v 1.458 2008/05/09 16:57:51 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** See the header comment on "btreeInt.h" for additional information. @@ -1644,6 +1644,7 @@ int sqlite3BtreeGetAutoVacuum(Btree *p){ static int lockBtree(BtShared *pBt){ int rc; MemPage *pPage1; + int nPage; assert( sqlite3_mutex_held(pBt->mutex) ); if( pBt->pPage1 ) return SQLITE_OK; @@ -1654,7 +1655,11 @@ static int lockBtree(BtShared *pBt){ ** a valid database file. */ rc = SQLITE_NOTADB; - if( sqlite3PagerPagecount(pBt->pPager)>0 ){ + nPage = sqlite3PagerPagecount(pBt->pPager); + if( nPage<0 ){ + rc = SQLITE_IOERR; + goto page1_init_failed; + }else if( nPage>0 ){ int pageSize; int usableSize; u8 *page1 = pPage1->aData; |