diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 0efa8afb..d5fc32aa 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -115,7 +115,9 @@ The following enviroment variables are interpreted by syncthing: STCPUPROFILE Write CPU profile to the specified file. - STGUIASSETS Directory to load GUI assets from. Overrides compiled in assets.` + STGUIASSETS Directory to load GUI assets from. Overrides compiled in assets. + + STDEADLOCKTIMEOUT Alter deadlock detection timeout (seconds; default 1200).` ) func init() { diff --git a/model/model.go b/model/model.go index 7cabbcc9..a05de8af 100644 --- a/model/model.go +++ b/model/model.go @@ -13,6 +13,7 @@ import ( "net" "os" "path/filepath" + "strconv" "sync" "time" @@ -97,9 +98,16 @@ func NewModel(indexDir string, cfg *config.Configuration, clientName, clientVers sup: suppressor{threshold: int64(cfg.Options.MaxChangeKbps)}, } - deadlockDetect(&m.rmut, 60*time.Second) - deadlockDetect(&m.smut, 60*time.Second) - deadlockDetect(&m.pmut, 60*time.Second) + var timeout = 20 * 60 // seconds + if t := os.Getenv("STDEADLOCKTIMEOUT"); len(t) > 0 { + it, err := strconv.Atoi(t) + if err == nil { + timeout = it + } + } + deadlockDetect(&m.rmut, time.Duration(timeout)*time.Second) + deadlockDetect(&m.smut, time.Duration(timeout)*time.Second) + deadlockDetect(&m.pmut, time.Duration(timeout)*time.Second) go m.broadcastIndexLoop() return m }