Index: src/bitvec.c ================================================================== --- src/bitvec.c +++ src/bitvec.c @@ -168,11 +168,11 @@ */ int sqlite3BitvecSet(Bitvec *p, u32 i){ u32 h; if( p==0 ) return SQLITE_OK; assert( i>0 ); - /* assert( i<=p->iSize ); */ + assert( i<=p->iSize ); if( i>p->iSize ){ sqlite3_log(SQLITE_ERROR, "Bitvec: setting bit %d of bitvec size %d\n", (int)i, (int)p->iSize ); } Index: src/btree.c ================================================================== --- src/btree.c +++ src/btree.c @@ -4127,14 +4127,15 @@ ** of the database file (i.e. free-list entries). */ if( rc==SQLITE_OK ){ assert( nCurrent!=PENDING_BYTE_PAGE(pBt) ); sqlite3PagerSetDbsize(pBt->pPager, nCurrent); nFree = get4byte(&p1[36]); - nFin = MAX(nCurrent-nFree, nHPage); + nFin = nCurrent-nFree; if( nCurrent>PENDING_BYTE_PAGE(pBt) && nFin<=PENDING_BYTE_PAGE(pBt) ){ nFin--; } + nFin = MAX(nFin, nHPage); rc = btreeRelocateRange(pBt, nFin+1, nCurrent, 0); } put4byte(&p1[28], nFin); } Index: test/concurrent2.test ================================================================== --- test/concurrent2.test +++ test/concurrent2.test @@ -574,8 +574,50 @@ sql1 { PRAGMA wal_checkpoint } sql2 { INSERT INTO t1 VALUES(3) } code2 { sqlite3_wal_info db2 main } } {0 1} } + +reset_db +do_execsql_test 12.0 { + PRAGMA journal_mode = wal; + CREATE TABLE tx(a INTEGER PRIMARY KEY, b); +} {wal} +do_test 12.1 { + for {set i 0} {$i < 50} {incr i} { + execsql { + BEGIN CONCURRENT; + INSERT INTO tx(b) VALUES( randomblob( 1200 ) ); + COMMIT; + } + } + execsql { PRAGMA page_size } +} {1024} +do_execsql_test 12.2 { + DELETE FROM tx; +} +do_test 12.3 { + for {set i 0} {$i < 50} {incr i} { + execsql { + BEGIN CONCURRENT; + INSERT INTO tx(b) VALUES( randomblob( 1200 ) ); + COMMIT; + } + } + execsql { PRAGMA page_size } +} {1024} +do_execsql_test 12.4 { + DELETE FROM tx; +} +do_test 12.5 { + execsql { BEGIN CONCURRENT } + for {set i 0} {$i < 5000} {incr i} { + execsql { + INSERT INTO tx(b) VALUES( randomblob( 1200 ) ); + } + } + execsql { COMMIT } + execsql { PRAGMA page_size } +} {1024} finish_test