From 838c182b5b1665473d68fc0670a8030a2268b2e4 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 15 Jan 2018 13:33:52 +0000 Subject: [PATCH] cmd/syncthing, lib/sync: Don't do deadlock detection when STDEADLOCKTIMEOUT=0 (fixes #4644) Allows setting STDEADLOCKTIMEOUT=0 (or any integer <= 0) to disable the deadlock detection entirely. GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4673 --- cmd/syncthing/main.go | 7 +++---- lib/sync/debug.go | 13 ++++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 8cb0d6cf..b392bcaf 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -770,10 +770,9 @@ func syncthingMain(runtimeOptions RuntimeOptions) { m := model.NewModel(cfg, myID, "syncthing", Version, ldb, protectedFiles) - if t := os.Getenv("STDEADLOCKTIMEOUT"); len(t) > 0 { - it, err := strconv.Atoi(t) - if err == nil { - m.StartDeadlockDetector(time.Duration(it) * time.Second) + if t := os.Getenv("STDEADLOCKTIMEOUT"); t != "" { + if secs, _ := strconv.Atoi(t); secs > 0 { + m.StartDeadlockDetector(time.Duration(secs) * time.Second) } } else if !IsRelease || IsBeta { m.StartDeadlockDetector(20 * time.Minute) diff --git a/lib/sync/debug.go b/lib/sync/debug.go index db349fb1..5c4a2360 100644 --- a/lib/sync/debug.go +++ b/lib/sync/debug.go @@ -24,17 +24,20 @@ var ( // }" variable, as it may be rather performance critical and does // nonstandard things (from a debug logging PoV). debug = strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all" - useDeadlock = os.Getenv("STDEADLOCKTIMEOUT") != "" + useDeadlock = false ) func init() { l.SetDebug("sync", strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all") - if n, err := strconv.Atoi(os.Getenv("STLOCKTHRESHOLD")); err == nil { + if n, _ := strconv.Atoi(os.Getenv("STLOCKTHRESHOLD")); n > 0 { threshold = time.Duration(n) * time.Millisecond } - if n, err := strconv.Atoi(os.Getenv("STDEADLOCKTIMEOUT")); err == nil { - deadlock.Opts.DeadlockTimeout = time.Duration(n) * time.Second - } l.Debugf("Enabling lock logging at %v threshold", threshold) + + if n, _ := strconv.Atoi(os.Getenv("STDEADLOCKTIMEOUT")); n > 0 { + deadlock.Opts.DeadlockTimeout = time.Duration(n) * time.Second + l.Debugf("Enabling lock deadlocking at %v", deadlock.Opts.DeadlockTimeout) + useDeadlock = true + } }