Hi Ludo, I've checked it some more. The shared cache uses unlock_notify, and the actual database uses sqlite3_busy_handler (sqlite3_busy_timeout) when BUSY is returned.
The 5 in
ice-9/eval.scm:619:8: Throw to key `sqlite-error' with args `(#f 5 "database is
locked")'.
^^
means SQLITE_BUSY, so that's the actual database.
So the easiest way to work around it would be to call
sqlite3_busy_timeout(db, 10); // ms
which would automatically repeatedly retry on busy until 10 ms have accumulated,
and only then give up.
There's also sqlite3_busy_handler which can be used to install a busy handler,
and of course in the future we could also handle SQLITE_BUSY ourselves and
yield.
See also https://notabug.org/civodul/guile-sqlite3/pulls/4 for the former.
pgpV0yvd_U1yF.pgp
Description: OpenPGP digital signature
