diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/btree.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/btree.c b/src/btree.c index 1bd59a1b1..064856635 100644 --- a/src/btree.c +++ b/src/btree.c @@ -3697,6 +3697,14 @@ static SQLITE_NOINLINE int btreeBeginTrans( (void)sqlite3PagerWalWriteLock(pPager, 0); unlockBtreeIfUnused(pBt); } +#if defined(SQLITE_ENABLE_SETLK_TIMEOUT) && defined(SQLITE_ENABLE_SNAPSHOT) + if( rc==SQLITE_BUSY_TIMEOUT ){ + /* If a blocking lock timed out, break out of the loop here so that + ** the busy-handler is not invoked. This can only happen when opening + ** a transaction on a snapshot. */ + break; + } +#endif }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && btreeInvokeBusyHandler(pBt) ); sqlite3PagerWalDb(pPager, 0); |