Index: dbfile.scm ================================================================== --- dbfile.scm +++ dbfile.scm @@ -495,13 +495,20 @@ (dbfile:print-err "INFO: forcing journal rollup "busy-file) (dbfile:brute-force-salvage-db fname))) (dbfile:cautious-open-database fname init-proc (- tries-left 1))) (let* ((db-exists (file-exists? fname)) (result (condition-case - (let* ((db (sqlite3:open-database fname))) + (let* ((nosyncdb *no-sync-db*) + (lockname (conc fname ".lock")) + (db (begin + (dbfile:simple-file-lock-and-wait lockname expire-time: 5) + (if nosyncdb (db:no-sync-get-lock nosyncdb fname)) + (sqlite3:open-database fname)))) (if (and init-proc (not db-exists)) (init-proc db)) + (if nosyncdb (db:no-sync-del! nosyncdb fname)) + (dbfile:simple-file-release-lock lockname) db) (exn (io-error) (dbfile:print-err exn "ERROR: i/o error with " fname ". Check permissions, disk space etc. and try again.") (retry)) (exn (corrupt)