@@ -17,6 +17,9 @@ func openDB(dbPath string) (*sql.DB, error) {
17 for name, value := range pragmas {
17 for name, value := range pragmas {
18 params.Add("_pragma", fmt.Sprintf("%s(%s)", name, value))
18 params.Add("_pragma", fmt.Sprintf("%s(%s)", name, value))
20+ // Use BEGIN IMMEDIATE so writers acquire the reserved lock up front,
21+ // preventing deferred-to-writer upgrade deadlocks.
22+ params.Set("_txlock", "immediate")
21 dsn := fmt.Sprintf("file:%s?%s", dbPath, params.Encode())
24 dsn := fmt.Sprintf("file:%s?%s", dbPath, params.Encode())
22 db, err := sql.Open("sqlite", dsn)
25 db, err := sql.Open("sqlite", dsn)