Browse Source

Merge branch 'main' into v2

* main:
  build: push artifacts to Azure (#10044)
  fix(syncthing): use separate lock file instead of locking the certificate (fixes #10053) (#10054)
  fix(syncthing): use separate lock file instead of locking the certificate (fixes #10053) (#10054)
Jakob Borg 6 months ago
parent
commit
780b8fd3bc
2 changed files with 8 additions and 4 deletions
  1. 6 4
      cmd/syncthing/main.go
  2. 2 0
      lib/locations/locations.go

+ 6 - 4
cmd/syncthing/main.go

@@ -22,7 +22,6 @@ import (
 	"path"
 	"path/filepath"
 	"regexp"
-	"runtime"
 	"runtime/pprof"
 	"sort"
 	"strconv"
@@ -442,7 +441,7 @@ func (c *serveCmd) syncthingMain() {
 	}
 
 	// Ensure we are the only running instance
-	lf := flock.New(locations.Get(locations.CertFile))
+	lf := flock.New(locations.Get(locations.LockFile))
 	locked, err := lf.TryLock()
 	if err != nil {
 		l.Warnln("Failed to acquire lock:", err)
@@ -585,7 +584,10 @@ func (c *serveCmd) syncthingMain() {
 		pprof.StopCPUProfile()
 	}
 
-	runtime.KeepAlive(lf) // ensure lock is still held to this point
+	// Best effort remove lockfile, doesn't matter if it succeeds
+	_ = lf.Unlock()
+	_ = os.Remove(locations.Get(locations.LockFile))
+
 	os.Exit(int(status))
 }
 
@@ -887,7 +889,7 @@ func (u upgradeCmd) Run() error {
 
 	release, err := checkUpgrade()
 	if err == nil {
-		lf := flock.New(locations.Get(locations.CertFile))
+		lf := flock.New(locations.Get(locations.LockFile))
 		locked, err := lf.TryLock()
 		if err != nil {
 			l.Warnln("Upgrade:", err)

+ 2 - 0
lib/locations/locations.go

@@ -34,6 +34,7 @@ const (
 	AuditLog       LocationEnum = "auditLog"
 	GUIAssets      LocationEnum = "guiAssets"
 	DefFolder      LocationEnum = "defFolder"
+	LockFile       LocationEnum = "lockFile"
 )
 
 type BaseDirEnum string
@@ -127,6 +128,7 @@ var locationTemplates = map[LocationEnum]string{
 	AuditLog:       "${data}/audit-%{timestamp}.log",
 	GUIAssets:      "${config}/gui",
 	DefFolder:      "${userHome}/Sync",
+	LockFile:       "${data}/syncthing.lock",
 }
 
 var locations = make(map[LocationEnum]string)