Index: src/pager.c ================================================================== --- src/pager.c +++ src/pager.c @@ -2754,10 +2754,14 @@ ** is made to roll it back. If an error occurs during the rollback ** a hot journal may be left in the filesystem but no error is returned ** to the caller. */ int sqlite3PagerClose(Pager *pPager){ + pagerEnter(pPager); + pPager->errCode = 0; + pager_reset(pPager); + pagerLeave(pPager); #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT if( !MEMDB ){ #ifndef SQLITE_MUTEX_NOOP sqlite3_mutex *mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MEM2); #endif @@ -2772,16 +2776,13 @@ } sqlite3_mutex_leave(mutex); pPager->onPagerList = 0; } #endif - disable_simulated_io_errors(); sqlite3FaultBeginBenign(-1); - pPager->errCode = 0; pPager->exclusiveMode = 0; - pager_reset(pPager); pagerUnlockAndRollback(pPager); enable_simulated_io_errors(); sqlite3FaultEndBenign(-1); PAGERTRACE2("CLOSE %d\n", PAGERID(pPager)); IOTRACE(("CLOSE %p\n", pPager))