diff options
author | danielk1977 <danielk1977@noemail.net> | 2008-05-05 15:26:50 +0000 |
---|---|---|
committer | danielk1977 <danielk1977@noemail.net> | 2008-05-05 15:26:50 +0000 |
commit | 4abd5449e8d24a08ef5dab49b98c719ffc6b1db6 (patch) | |
tree | 9fe25c1af54780e9f814c286d1b3f191c62c6747 /src | |
parent | 344c38e34052464872a4fadb2df848a6f02fbea8 (diff) | |
download | sqlite-4abd5449e8d24a08ef5dab49b98c719ffc6b1db6.tar.gz sqlite-4abd5449e8d24a08ef5dab49b98c719ffc6b1db6.zip |
Avoid leaking page references after an IO error is encountered. (CVS 5082)
FossilOrigin-Name: 198c395b01140ef48b6913c00188ba7168bfb081
Diffstat (limited to 'src')
-rw-r--r-- | src/btree.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/btree.c b/src/btree.c index 7897b7470..c4d972f96 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.454 2008/05/05 12:09:33 danielk1977 Exp $ +** $Id: btree.c,v 1.455 2008/05/05 15:26:51 danielk1977 Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** See the header comment on "btreeInt.h" for additional information. @@ -6835,16 +6835,12 @@ static int btreeCopyFile(Btree *pTo, Btree *pFrom){ ** present in pTo before the copy operation, journal page i from pTo. */ if( i!=iSkip && i<=nToPage ){ - DbPage *pDbPage; + DbPage *pDbPage = 0; rc = sqlite3PagerGet(pBtTo->pPager, i, &pDbPage); - if( rc ){ - break; - } - rc = sqlite3PagerWrite(pDbPage); - if( rc ){ - break; + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pDbPage); } - if( i>nFromPage ){ + if( rc==SQLITE_OK && i>nFromPage ){ /* Yeah. It seems wierd to call DontWrite() right after Write(). But ** that is because the names of those procedures do not exactly ** represent what they do. Write() really means "put this page in the |