Index: src/btree.c ================================================================== --- src/btree.c +++ src/btree.c @@ -4805,10 +4805,14 @@ } if( k==0 ){ if( !pPrevTrunk ){ memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); } }else{ /* The trunk page is required by the caller but it contains ** pointers to free-list leaves. The first leaf becomes a trunk ADDED test/tkt-5e10420e8d.test Index: test/tkt-5e10420e8d.test ================================================================== --- /dev/null +++ test/tkt-5e10420e8d.test @@ -0,0 +1,50 @@ +# 2010 August 23 +# +# 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 + +do_execsql_test tkt-5e10420e8d.1 { + PRAGMA page_size = 1024; + PRAGMA auto_vacuum = incremental; + + CREATE TABLE t1(x); + CREATE TABLE t2(x); + CREATE TABLE t3(x); +} {} + +do_execsql_test tkt-5e10420e8d.2 { + INSERT INTO t3 VALUES(randomblob(500 + 1024*248)); + INSERT INTO t1 VALUES(randomblob(1500)); + INSERT INTO t2 VALUES(randomblob(500 + 1024*248)); + + DELETE FROM t3; + DELETE FROM t2; + DELETE FROM t1; +} {} + +do_execsql_test tkt-5e10420e8d.3 { + PRAGMA incremental_vacuum(248) +} {} + +do_execsql_test tkt-5e10420e8d.4 { + PRAGMA incremental_vacuum(1) +} {} + +db close +sqlite3 db test.db + +do_execsql_test tkt-5e10420e8d.5 { + PRAGMA integrity_check; +} {ok} + +finish_test