# HG changeset patch # User Jun Wu # Date 1468956851 -3600 # Node ID bc73b80baf983c1f822b7eddb16684905c34cd86 # Parent 9a6bb365786159343633fd8c27bef6cc795fc7ae SqliteRevMap: wait indefinitely for database lock Python sqlite has 5 seconds timeout by default, which means if a writer holds the lock, and the second writer will error out after 5 seconds. In our use-case, it makes sense to just wait. However, sqlite does not support waiting forever (see sqlite3_busy_timeout). Therefore use a while loop to workaround. diff --git a/hgsubversion/maps.py b/hgsubversion/maps.py --- a/hgsubversion/maps.py +++ b/hgsubversion/maps.py @@ -662,7 +662,14 @@ class SqliteRevMap(collections.MutableMa if self._db is None: self._opendb() with self._db as db: - db.execute('BEGIN %s' % mode) + # wait indefinitely for database lock + while True: + try: + db.execute('BEGIN %s' % mode) + break + except sqlite3.OperationalError as ex: + if str(ex) != 'database is locked': + raise yield db def _query(self, sql, params=()):