diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 8b29fdc0d..bd35c6667 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -915,10 +915,14 @@ func (u upgradeCmd) Run() error { case err != nil && !os.IsNotExist(err): slog.Error("Failed to lock for upgrade", slogutil.Error(err)) os.Exit(1) - case locked: - err = upgradeViaRest() - default: + case locked || os.IsNotExist(err): + // We got the lock, or the config directory didn't exist, so we + // can do a direct upgrade err = upgrade.To(release) + default: + // We didn't get the lock, because Syncthing was running, so + // upgrade via REST. + err = upgradeViaRest() } } if err != nil {