Thanks for the explanation, In your example you are calling both: ``` 1. sqlite3_busy_timeout(db, val) 2. sqlite3_busy_handler(db, cbFn, db) ``` But for each db connection, you can only use one of these? The second call will clear the first's behaviour? So to summarise: - `sqlite3_busy_timeout` - Will block app code, poll the db file until either (lock is achieved OR timeout expires) - `sqlite3_busy_handler` - Completely application defined polling - SQLite itself will not sleep or poll. - Return true = SQLite will immediately try to get a lock. - Return false = SQLite returns BUSY for the statement. - On sleep = SQLite is waiting for a return value.