From 04da31af2b9cd286ca132ef33e1fed22b5facc66 Mon Sep 17 00:00:00 2001 From: Fergus Dall Date: Fri, 27 Jan 2023 03:08:21 +1100 Subject: [PATCH] Fix deadlock in Lock.Stale With debug logging enabled this method would take a lock and then format the lock as a string. Since PR #4022 landed the string formatting method has also taken the lock, so this deadlocks. Instead just record the lock ID, as is done elsewhere. --- internal/restic/lock.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/restic/lock.go b/internal/restic/lock.go index 2da3667a3..d500c019a 100644 --- a/internal/restic/lock.go +++ b/internal/restic/lock.go @@ -222,7 +222,7 @@ var StaleLockTimeout = 30 * time.Minute func (l *Lock) Stale() bool { l.lock.Lock() defer l.lock.Unlock() - debug.Log("testing if lock %v for process %d is stale", l, l.PID) + debug.Log("testing if lock %v for process %d is stale", l.lockID, l.PID) if time.Since(l.Time) > StaleLockTimeout { debug.Log("lock is stale, timestamp is too old: %v\n", l.Time) return true