瀏覽代碼

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
Jakob Borg 8 年之前
父節點
當前提交
838c182b5b
共有 2 個文件被更改,包括 10 次插入8 次删除
  1. 3 4
      cmd/syncthing/main.go
  2. 7 4
      lib/sync/debug.go

+ 3 - 4
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)

+ 7 - 4
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 {
+	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
 	}
-	l.Debugf("Enabling lock logging at %v threshold", threshold)
 }