SQLite via expo-sqlite is a single-writer database. If Background Hydration and a User Saga attempt concurrent transactions, the native bridge throws SQLITE_BUSY or SQLITE_LOCKED errors.
Every lock holder has a hard time limit (default: 30 seconds). If exceeded, the lock is forcibly released via Promise.race. The timed-out operation’s result is silently discarded.
On app startup, syncLock.reset() clears any stale state from a prior crash. Required for Android ROMs that keep the process alive after swipe-kill when an Accessibility Service is active.