diff --git a/.github/workflows/build-infra-dockers.yaml b/.github/workflows/build-infra-dockers.yaml index 09878ccd4..36a6b2853 100644 --- a/.github/workflows/build-infra-dockers.yaml +++ b/.github/workflows/build-infra-dockers.yaml @@ -7,7 +7,7 @@ on: - infra-* env: - GO_VERSION: "~1.25.0" + GO_VERSION: "~1.26.0" CGO_ENABLED: "0" BUILD_USER: docker BUILD_HOST: github.syncthing.net diff --git a/.github/workflows/build-syncthing.yaml b/.github/workflows/build-syncthing.yaml index 114e11503..9ac4ffcf2 100644 --- a/.github/workflows/build-syncthing.yaml +++ b/.github/workflows/build-syncthing.yaml @@ -13,7 +13,7 @@ env: # The go version to use for builds. We set check-latest to true when # installing, so we get the latest patch version that matches the # expression. - GO_VERSION: "~1.25.0" + GO_VERSION: "~1.26.0" # Optimize compatibility on the slow architectures. GOMIPS: softfloat @@ -103,7 +103,7 @@ jobs: runner: ["windows-latest", "ubuntu-latest", "macos-latest"] # The oldest version in this list should match what we have in our go.mod. # Variables don't seem to be supported here, or we could have done something nice. - go: ["~1.24.0", "~1.25.0"] + go: ["~1.25.0", "~1.26.0"] runs-on: ${{ matrix.runner }} steps: - name: Set git to use LF @@ -187,7 +187,7 @@ jobs: - uses: actions/setup-go@v6 with: - go-version: ${{ needs.facts.outputs.go-version }} + go-version: "~1.25.7" # temporarily stay on Go 1.25 due to linker error on Go 1.26 cache: false - uses: mlugg/setup-zig@v2 diff --git a/cmd/dev/stcompdirs/main.go b/cmd/dev/stcompdirs/main.go index c39c3cf4a..587804261 100644 --- a/cmd/dev/stcompdirs/main.go +++ b/cmd/dev/stcompdirs/main.go @@ -15,8 +15,6 @@ import ( "log" "os" "path/filepath" - - _ "github.com/syncthing/syncthing/lib/automaxprocs" ) func main() { diff --git a/cmd/dev/stdisco/main.go b/cmd/dev/stdisco/main.go index 5f909f028..0e94f7d09 100644 --- a/cmd/dev/stdisco/main.go +++ b/cmd/dev/stdisco/main.go @@ -18,7 +18,6 @@ import ( "google.golang.org/protobuf/proto" "github.com/syncthing/syncthing/internal/gen/discoproto" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/beacon" "github.com/syncthing/syncthing/lib/discover" "github.com/syncthing/syncthing/lib/protocol" diff --git a/cmd/dev/stevents/main.go b/cmd/dev/stevents/main.go index 4f9a59f37..b723ab542 100644 --- a/cmd/dev/stevents/main.go +++ b/cmd/dev/stevents/main.go @@ -14,8 +14,6 @@ import ( "net/http" "os" "time" - - _ "github.com/syncthing/syncthing/lib/automaxprocs" ) type event struct { diff --git a/cmd/dev/stfileinfo/main.go b/cmd/dev/stfileinfo/main.go index 4c1e2aedb..1eeae01bf 100644 --- a/cmd/dev/stfileinfo/main.go +++ b/cmd/dev/stfileinfo/main.go @@ -13,7 +13,6 @@ import ( "os" "path/filepath" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/scanner" ) diff --git a/cmd/dev/stfinddevice/main.go b/cmd/dev/stfinddevice/main.go index 8b7364e53..f6e94a3ba 100644 --- a/cmd/dev/stfinddevice/main.go +++ b/cmd/dev/stfinddevice/main.go @@ -16,7 +16,6 @@ import ( "os" "time" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/discover" "github.com/syncthing/syncthing/lib/events" diff --git a/cmd/dev/stfindignored/main.go b/cmd/dev/stfindignored/main.go index c400ef2fb..7ec7969f3 100644 --- a/cmd/dev/stfindignored/main.go +++ b/cmd/dev/stfindignored/main.go @@ -12,7 +12,6 @@ import ( "fmt" "os" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/fs" "github.com/syncthing/syncthing/lib/ignore" ) diff --git a/cmd/dev/stgenfiles/main.go b/cmd/dev/stgenfiles/main.go index 8bd3281a2..eea488b42 100644 --- a/cmd/dev/stgenfiles/main.go +++ b/cmd/dev/stgenfiles/main.go @@ -15,8 +15,6 @@ import ( "os" "path/filepath" "time" - - _ "github.com/syncthing/syncthing/lib/automaxprocs" ) func main() { diff --git a/cmd/dev/stsigtool/main.go b/cmd/dev/stsigtool/main.go index b3a497380..ab4c46b3e 100644 --- a/cmd/dev/stsigtool/main.go +++ b/cmd/dev/stsigtool/main.go @@ -12,7 +12,6 @@ import ( "log" "os" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/signature" "github.com/syncthing/syncthing/lib/upgrade" ) diff --git a/cmd/dev/stvanity/main.go b/cmd/dev/stvanity/main.go index 2bd840a3e..12b2e8bda 100644 --- a/cmd/dev/stvanity/main.go +++ b/cmd/dev/stvanity/main.go @@ -26,7 +26,6 @@ import ( "sync/atomic" "time" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/protocol" ) @@ -53,11 +52,9 @@ func main() { // Run one certificate generator per CPU core. var wg sync.WaitGroup for i := 0; i < runtime.GOMAXPROCS(-1); i++ { - wg.Add(1) - go func() { + wg.Go(func() { generatePrefixed(prefix, &count, found, stop) - wg.Done() - }() + }) } // Save the result, when one has been found. diff --git a/cmd/dev/stwatchfile/main.go b/cmd/dev/stwatchfile/main.go index 51e557fc9..f2c9bb9f1 100644 --- a/cmd/dev/stwatchfile/main.go +++ b/cmd/dev/stwatchfile/main.go @@ -13,8 +13,6 @@ import ( "io" "os" "time" - - _ "github.com/syncthing/syncthing/lib/automaxprocs" ) func main() { diff --git a/cmd/infra/stcrashreceiver/main.go b/cmd/infra/stcrashreceiver/main.go index 6c434147e..4fcd1b8a5 100644 --- a/cmd/infra/stcrashreceiver/main.go +++ b/cmd/infra/stcrashreceiver/main.go @@ -28,7 +28,6 @@ import ( "github.com/alecthomas/kong" raven "github.com/getsentry/raven-go" "github.com/prometheus/client_golang/prometheus/promhttp" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/ur" ) diff --git a/cmd/infra/strelaypoolsrv/main.go b/cmd/infra/strelaypoolsrv/main.go index 7eedc4515..be1bab339 100644 --- a/cmd/infra/strelaypoolsrv/main.go +++ b/cmd/infra/strelaypoolsrv/main.go @@ -27,7 +27,6 @@ import ( "github.com/syncthing/syncthing/cmd/infra/strelaypoolsrv/auto" "github.com/syncthing/syncthing/lib/assets" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/geoip" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/rand" diff --git a/cmd/infra/strelaypoolsrv/stats.go b/cmd/infra/strelaypoolsrv/stats.go index f964b9b37..aeea6b636 100644 --- a/cmd/infra/strelaypoolsrv/stats.go +++ b/cmd/infra/strelaypoolsrv/stats.go @@ -108,8 +108,7 @@ func refreshStats() { results := make(chan statsFetchResult, len(relays)) for _, rel := range relays { - wg.Add(1) - go func(rel *relay) { + wg.Go(func() { t0 := time.Now() stats := fetchStats(rel) duration := time.Since(t0).Seconds() @@ -123,8 +122,7 @@ func refreshStats() { relay: rel, stats: fetchStats(rel), } - wg.Done() - }(rel) + }) } wg.Wait() diff --git a/cmd/infra/stupgrades/main.go b/cmd/infra/stupgrades/main.go index 30201607e..8d18506c2 100644 --- a/cmd/infra/stupgrades/main.go +++ b/cmd/infra/stupgrades/main.go @@ -25,7 +25,6 @@ import ( "github.com/alecthomas/kong" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/syncthing/syncthing/internal/slogutil" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/httpcache" "github.com/syncthing/syncthing/lib/upgrade" ) diff --git a/cmd/infra/ursrv/main.go b/cmd/infra/ursrv/main.go index b637d4d29..2634edfb3 100644 --- a/cmd/infra/ursrv/main.go +++ b/cmd/infra/ursrv/main.go @@ -13,7 +13,6 @@ import ( "github.com/alecthomas/kong" "github.com/syncthing/syncthing/cmd/infra/ursrv/serve" - _ "github.com/syncthing/syncthing/lib/automaxprocs" ) type CLI struct { diff --git a/cmd/stdiscosrv/main.go b/cmd/stdiscosrv/main.go index 4e2c04889..a02455f7e 100644 --- a/cmd/stdiscosrv/main.go +++ b/cmd/stdiscosrv/main.go @@ -24,7 +24,6 @@ import ( "github.com/syncthing/syncthing/internal/blob" "github.com/syncthing/syncthing/internal/blob/s3" "github.com/syncthing/syncthing/internal/slogutil" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/rand" diff --git a/cmd/strelaysrv/main.go b/cmd/strelaysrv/main.go index 6f3247501..a9a83db13 100644 --- a/cmd/strelaysrv/main.go +++ b/cmd/strelaysrv/main.go @@ -22,7 +22,6 @@ import ( "golang.org/x/time/rate" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/events" diff --git a/cmd/strelaysrv/session.go b/cmd/strelaysrv/session.go index 79d1184fc..6e592d87b 100644 --- a/cmd/strelaysrv/session.go +++ b/cmd/strelaysrv/session.go @@ -158,19 +158,12 @@ func (s *session) Serve() { } wg := sync.WaitGroup{} - wg.Add(2) var err0 error - go func() { - err0 = s.proxy(s.conns[0], s.conns[1]) - wg.Done() - }() + wg.Go(func() { err0 = s.proxy(s.conns[0], s.conns[1]) }) var err1 error - go func() { - err1 = s.proxy(s.conns[1], s.conns[0]) - wg.Done() - }() + wg.Go(func() { err1 = s.proxy(s.conns[1], s.conns[0]) }) sessionMut.Lock() activeSessions = append(activeSessions, s) diff --git a/cmd/strelaysrv/testutil/main.go b/cmd/strelaysrv/testutil/main.go index 4b4392db9..0419434c8 100644 --- a/cmd/strelaysrv/testutil/main.go +++ b/cmd/strelaysrv/testutil/main.go @@ -15,7 +15,6 @@ import ( "path/filepath" "time" - _ "github.com/syncthing/syncthing/lib/automaxprocs" syncthingprotocol "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/relay/client" "github.com/syncthing/syncthing/lib/relay/protocol" diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 7d177e857..c34156d70 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -42,7 +42,6 @@ import ( "github.com/syncthing/syncthing/internal/db" "github.com/syncthing/syncthing/internal/db/sqlite" "github.com/syncthing/syncthing/internal/slogutil" - _ "github.com/syncthing/syncthing/lib/automaxprocs" "github.com/syncthing/syncthing/lib/build" "github.com/syncthing/syncthing/lib/config" "github.com/syncthing/syncthing/lib/dialer" diff --git a/cmd/syncthing/monitor.go b/cmd/syncthing/monitor.go index 1af210fbb..1ca66aba1 100644 --- a/cmd/syncthing/monitor.go +++ b/cmd/syncthing/monitor.go @@ -137,17 +137,8 @@ func (c *serveCmd) monitorMain() { var wg sync.WaitGroup - wg.Add(1) - go func() { - copyStderr(stderr, dst) - wg.Done() - }() - - wg.Add(1) - go func() { - copyStdout(stdout, dst) - wg.Done() - }() + wg.Go(func() { copyStderr(stderr, dst) }) + wg.Go(func() { copyStdout(stdout, dst) }) exit := make(chan error) diff --git a/compat.yaml b/compat.yaml index 28e4810ae..9b2825885 100644 --- a/compat.yaml +++ b/compat.yaml @@ -39,3 +39,10 @@ darwin: "21" linux: "3.2" windows: "10.0" + +- runtime: go1.26 # no changes from 1.25 + requirements: + darwin: "21" + linux: "3.2" + windows: "10.0" + diff --git a/go.mod b/go.mod index 8a491e35a..d3d19377f 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/syncthing/syncthing -go 1.24.0 +go 1.25.0 require ( github.com/AudriusButkevicius/recli v0.0.7 - github.com/alecthomas/kong v1.12.1 + github.com/alecthomas/kong v1.14.0 github.com/aws/aws-sdk-go v1.55.8 github.com/calmh/incontainer v1.0.0 github.com/calmh/xdr v1.2.0 @@ -12,27 +12,27 @@ require ( github.com/coreos/go-semver v0.3.1 github.com/d4l3k/messagediff v1.2.1 github.com/getsentry/raven-go v0.2.0 - github.com/go-ldap/ldap/v3 v3.4.11 + github.com/go-ldap/ldap/v3 v3.4.12 github.com/gobwas/glob v0.2.3 - github.com/gofrs/flock v0.12.1 + github.com/gofrs/flock v0.13.0 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/jackpal/gateway v1.0.16 + github.com/jackpal/gateway v1.1.1 github.com/jackpal/go-nat-pmp v1.0.2 github.com/jmoiron/sqlx v1.4.0 github.com/julienschmidt/httprouter v1.3.0 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/maruel/panicparse/v2 v2.5.0 - github.com/mattn/go-sqlite3 v1.14.31 + github.com/mattn/go-sqlite3 v1.14.34 github.com/maxmind/geoipupdate/v6 v6.1.0 github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75 github.com/oschwald/geoip2-golang v1.13.0 - github.com/pierrec/lz4/v4 v4.1.22 - github.com/prometheus/client_golang v1.23.0 + github.com/pierrec/lz4/v4 v4.1.25 + github.com/prometheus/client_golang v1.23.2 github.com/puzpuzpuz/xsync/v3 v3.5.1 - github.com/quic-go/quic-go v0.56.0 + github.com/quic-go/quic-go v0.59.0 github.com/rabbitmq/amqp091-go v1.10.0 github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 - github.com/shirou/gopsutil/v4 v4.25.6 // https://github.com/shirou/gopsutil/issues/1898 + github.com/shirou/gopsutil/v4 v4.26.1 // https://github.com/shirou/gopsutil/issues/1898 github.com/syncthing/notify v0.0.0-20250528144937-c7027d4f7465 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d github.com/thejerf/suture/v4 v4.0.6 @@ -40,15 +40,14 @@ require ( github.com/vitrun/qart v0.0.0-20160531060029-bf64b92db6b0 github.com/willabides/kongplete v0.4.0 github.com/wlynxg/anet v0.0.5 - go.uber.org/automaxprocs v1.6.0 - golang.org/x/crypto v0.44.0 - golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 - golang.org/x/net v0.47.0 - golang.org/x/sys v0.38.0 - golang.org/x/text v0.31.0 - golang.org/x/time v0.12.0 - google.golang.org/protobuf v1.36.7 - modernc.org/sqlite v1.38.2 + golang.org/x/crypto v0.48.0 + golang.org/x/exp v0.0.0-20260209203927-2842357ff358 + golang.org/x/net v0.50.0 + golang.org/x/sys v0.41.0 + golang.org/x/text v0.34.0 + golang.org/x/time v0.14.0 + google.golang.org/protobuf v1.36.11 + modernc.org/sqlite v1.45.0 sigs.k8s.io/yaml v1.6.0 ) @@ -61,7 +60,7 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/ebitengine/purego v0.8.4 // indirect + github.com/ebitengine/purego v0.9.1 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -75,7 +74,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect github.com/nxadm/tail v1.4.11 // indirect github.com/oschwald/maxminddb-golang v1.13.1 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -83,24 +82,24 @@ require ( github.com/posener/complete v1.2.3 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/riywo/loginshell v0.0.0-20200815045211-7d26008be1ab // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/stretchr/testify v1.10.0 // indirect - github.com/tklauser/go-sysconf v0.3.15 // indirect - github.com/tklauser/numcpus v0.10.0 // indirect + github.com/stretchr/testify v1.11.1 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/mod v0.30.0 // indirect - golang.org/x/sync v0.18.0 // indirect - golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 // indirect - golang.org/x/tools v0.39.0 // indirect + golang.org/x/mod v0.33.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4 // indirect + golang.org/x/tools v0.42.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.66.3 // indirect + modernc.org/libc v1.67.6 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index b21184af5..f0740f76b 100644 --- a/go.sum +++ b/go.sum @@ -7,20 +7,18 @@ github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzS github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= -github.com/alecthomas/kong v1.12.1 h1:iq6aMJDcFYP9uFrLdsiZQ2ZMmcshduyGv4Pek0MQPW0= -github.com/alecthomas/kong v1.12.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= -github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= -github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= -github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa h1:LHTHcTQiSGT7VVbI0o4wBRNQIgn917usHWOd6VAffYI= -github.com/alexbrainman/sspi v0.0.0-20231016080023-1a75b4708caa/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= +github.com/alecthomas/kong v1.14.0 h1:gFgEUZWu2ZmZ+UhyZ1bDhuutbKN1nTtJTwh19Wsn21s= +github.com/alecthomas/kong v1.14.0/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I= +github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= +github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e h1:4dAU9FXIyQktpoUAgOJK3OTFc/xug0PCXYCqU0FgDKI= +github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/calmh/glob v0.0.0-20220615080505-1d823af5017b h1:Fjm4GuJ+TGMgqfGHN42IQArJb77CfD/mAwLbDUoJe6g= github.com/calmh/glob v0.0.0-20220615080505-1d823af5017b/go.mod h1:91K7jfEsgJSyfSrX+gmrRfZMtntx6JsHolWubGXDopg= -github.com/calmh/go-sqlite3 v1.14.32-0.20250812195006-80712c77b76a h1:lTe5qJApKNO+zZCa3/P/7UxM4c58CXWOegv9eODPWvs= -github.com/calmh/go-sqlite3 v1.14.32-0.20250812195006-80712c77b76a/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/calmh/incontainer v1.0.0 h1:g2cTUtZuFGmMGX8GoykPkN1Judj2uw8/3/aEtq4Z/rg= github.com/calmh/incontainer v1.0.0/go.mod h1:eOhqnw15c9X+4RNBe0W3HlUZFfX16O0EDsCOInTndHY= github.com/calmh/xdr v1.2.0 h1:GaGSNH4ZDw9kNdYqle6+RcAENiaQ8/611Ok+jQbBEeU= @@ -47,8 +45,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/ebitengine/purego v0.8.4 h1:CF7LEKg5FFOsASUj0+QwaXf8Ht6TlFxg09+S9wz0omw= -github.com/ebitengine/purego v0.8.4/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= +github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= @@ -59,16 +57,16 @@ github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JY github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-ldap/ldap/v3 v3.4.11 h1:4k0Yxweg+a3OyBLjdYn5OKglv18JNvfDykSoI8bW0gU= -github.com/go-ldap/ldap/v3 v3.4.11/go.mod h1:bY7t0FLK8OAVpp/vV6sSlpz3EQDGcQwc8pF0ujLgKvM= +github.com/go-ldap/ldap/v3 v3.4.12 h1:1b81mv7MagXZ7+1r7cLTWmyuTqVqdwbtJSjC0DAp9s4= +github.com/go-ldap/ldap/v3 v3.4.12/go.mod h1:+SPAGcTtOfmGsCb3h1RFiq4xpp4N636G75OEace8lNo= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= -github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= +github.com/gofrs/flock v0.13.0 h1:95JolYOvGMqeH31+FC7D2+uULf6mG61mEZ/A8dRYMzw= +github.com/gofrs/flock v0.13.0/go.mod h1:jxeyy9R1auM5S6JYDBhDt+E2TCo7DkratH4Pgi8P+Z0= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -106,8 +104,8 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jackpal/gateway v1.0.16 h1:mTBRuHSW8qviVqX7kXnxKevqlfS/OA01ys6k6fxSX7w= -github.com/jackpal/gateway v1.0.16/go.mod h1:IOn1OUbso/cGYmnCBZbCEqhNCLSz0xxdtIpUpri5/nA= +github.com/jackpal/gateway v1.1.1 h1:UXXXkJGIHFsStms9ZBgGpoaFEJP7oJtFn5vplIT68E8= +github.com/jackpal/gateway v1.1.1/go.mod h1:Tl1vZVtUaXx5j6P5HFmv45alhEi4yHHLfT4PRbB7eyw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= @@ -149,6 +147,8 @@ github.com/maruel/panicparse/v2 v2.5.0/go.mod h1:DA2fDiBk63bKfBf4CVZP9gb4fuvzdPb github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk= +github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0 h1:aOeI7xAOVdK+R6xbVsZuU9HmCZYmQVmZgPf9xJUd2Sg= github.com/maxbrunsfeld/counterfeiter/v6 v6.12.0/go.mod h1:0hZWbtfeCYUQeAQdPLUzETiBhUSns7O6LDj9vH88xKA= github.com/maxmind/geoipupdate/v6 v6.1.0 h1:sdtTHzzQNJlXF5+fd/EoPTucRHyMonYt/Cok8xzzfqA= @@ -157,8 +157,8 @@ github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75 h1:cUVxyR+U github.com/miscreant/miscreant.go v0.0.0-20200214223636-26d376326b75/go.mod h1:pBbZyGwC5i16IBkjVKoy/sznA8jPD/K9iedwe1ESE6w= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= -github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= @@ -179,8 +179,8 @@ github.com/oschwald/geoip2-golang v1.13.0 h1:Q44/Ldc703pasJeP5V9+aFSZFmBN7DKHbNs github.com/oschwald/geoip2-golang v1.13.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo= github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0= +github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -190,20 +190,18 @@ github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXq github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= -github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= -github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= -github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= +github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/puzpuzpuz/xsync/v3 v3.5.1 h1:GJYJZwO6IdxN/IKbneznS6yPkVC+c3zyY/j19c++5Fg= github.com/puzpuzpuz/xsync/v3 v3.5.1/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= -github.com/quic-go/quic-go v0.56.0 h1:q/TW+OLismmXAehgFLczhCDTYB3bFmua4D9lsNBWxvY= -github.com/quic-go/quic-go v0.56.0/go.mod h1:9gx5KsFQtw2oZ6GZTyh+7YEvOxWCL9WZAepnHxgAo6c= +github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= +github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw= github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o= github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= @@ -218,8 +216,8 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= -github.com/shirou/gopsutil/v4 v4.25.6 h1:kLysI2JsKorfaFPcYmcJqbzROzsBWEOAtw6A7dIfqXs= -github.com/shirou/gopsutil/v4 v4.25.6/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c= +github.com/shirou/gopsutil/v4 v4.26.1 h1:TOkEyriIXk2HX9d4isZJtbjXbEjf5qyKPAzbzY0JWSo= +github.com/shirou/gopsutil/v4 v4.26.1/go.mod h1:medLI9/UNAb0dOI9Q3/7yWSqKkj00u+1tgY8nvv41pc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -231,18 +229,19 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/syncthing/notify v0.0.0-20250528144937-c7027d4f7465 h1:yhxdTGmFkAM2TFA65c3NgGwpnIkUM8oVqPX2e9S7IVg= github.com/syncthing/notify v0.0.0-20250528144937-c7027d4f7465/go.mod h1:J0q59IWjLtpRIJulohwqEZvjzwOfTEPp8SVhDJl+y0Y= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/thejerf/suture/v4 v4.0.6 h1:QsuCEsCqb03xF9tPAsWAj8QOAJBgQI1c0VqJNaingg8= github.com/thejerf/suture/v4 v4.0.6/go.mod h1:gu9Y4dXNUWFrByqRt30Rm9/UZ0wzRSt9AJS6xu/ZGxU= -github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= -github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= -github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= -github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ= github.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo= @@ -255,8 +254,6 @@ github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguH github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= @@ -268,13 +265,13 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= -golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 h1:3yiSh9fhy5/RhCSntf4Sy0Tnx50DmMpQ4MQdKKk4yg4= -golang.org/x/exp v0.0.0-20250811191247-51f88131bc50/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/exp v0.0.0-20260209203927-2842357ff358 h1:kpfSV7uLwKJbFSEgNhWzGSL47NDSF/5pYYQw1V0ub6c= +golang.org/x/exp v0.0.0-20260209203927-2842357ff358/go.mod h1:R3t0oliuryB5eenPWl3rrQxwnNM3WTwnsRZZiXLAAW8= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -283,13 +280,13 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -312,25 +309,25 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 h1:E2/AqCUMZGgd73TQkxUMcMla25GB9i/5HOdLr+uH7Vo= -golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4 h1:bTLqdHv7xrGlFbvf5/TXNxy/iUwwdkjhqQTJDjW7aj0= +golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4/go.mod h1:g5NllXBEermZrmR51cJDQxmJUHUOfRAaNyWBM+R+548= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= -golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= -golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -344,8 +341,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= -google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -361,18 +358,20 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -modernc.org/cc/v4 v4.26.2 h1:991HMkLjJzYBIfha6ECZdjrIYz2/1ayr+FL8GN+CNzM= -modernc.org/cc/v4 v4.26.2/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.28.0 h1:rjznn6WWehKq7dG4JtLRKxb52Ecv8OUGah8+Z/SfpNU= -modernc.org/ccgo/v4 v4.28.0/go.mod h1:JygV3+9AV6SmPhDasu4JgquwU81XAKLd3OKTUDNOiKE= -modernc.org/fileutil v1.3.8 h1:qtzNm7ED75pd1C7WgAGcK4edm4fvhtBsEiI/0NQ54YM= -modernc.org/fileutil v1.3.8/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= +modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.30.1 h1:4r4U1J6Fhj98NKfSjnPUN7Ze2c6MnAdL0hWw6+LrJpc= +modernc.org/ccgo/v4 v4.30.1/go.mod h1:bIOeI1JL54Utlxn+LwrFyjCx2n2RDiYEaJVSrgdrRfM= +modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= +modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.1 h1:k8T3gkXWY9sEiytKhcgyiZ2L0DTyCQ/nvX+LoCljoRE= +modernc.org/gc/v3 v3.1.1/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.66.3 h1:cfCbjTUcdsKyyZZfEUKfoHcP3S0Wkvz3jgSzByEWVCQ= -modernc.org/libc v1.66.3/go.mod h1:XD9zO8kt59cANKvHPXpx7yS2ELPheAey0vjIuZOhOU8= +modernc.org/libc v1.67.6 h1:eVOQvpModVLKOdT+LvBPjdQqfrZq+pC39BygcT+E7OI= +modernc.org/libc v1.67.6/go.mod h1:JAhxUVlolfYDErnwiqaLvUqc8nfb2r6S6slAgZOnaiE= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= @@ -381,8 +380,8 @@ modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= -modernc.org/sqlite v1.38.2 h1:Aclu7+tgjgcQVShZqim41Bbw9Cho0y/7WzYptXqkEek= -modernc.org/sqlite v1.38.2/go.mod h1:cPTJYSlgg3Sfg046yBShXENNtPrWrDX8bsbAQBzgQ5E= +modernc.org/sqlite v1.45.0 h1:r51cSGzKpbptxnby+EIIz5fop4VuE4qFoVEjNvWoObs= +modernc.org/sqlite v1.45.0/go.mod h1:CzbrU2lSB1DKUusvwGz7rqEKIq+NUd8GWuBBZDs9/nA= modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/gui/default/syncthing/core/aboutModalView.html b/gui/default/syncthing/core/aboutModalView.html index 9188f8bcb..cfc54d314 100644 --- a/gui/default/syncthing/core/aboutModalView.html +++ b/gui/default/syncthing/core/aboutModalView.html @@ -62,7 +62,6 @@ Jakob Borg, Audrius Butkevicius, Simon Frei, Tomasz WilczyƄski, Alexander Graf,
  • davecgh/go-spew, Copyright © 2012-2016 Dave Collins.
  • go-asn1-ber/asn1-ber, Copyright © 2011-2015 Michael Mitton (mmitton@gmail.com).
  • go-ldap/ldap, Copyright © 2011-2015 Michael Mitton (mmitton@gmail.com).
  • -
  • go.uber.org/automaxprocs, Copyright © 2017 Uber Technologies, Inc.
  • gobwas/glob, Copyright © 2016 Sergey Kamardin.
  • gofrs/flock, Copyright © 2018-2025, The Gofrs.
  • golang/snappy, Copyright © 2011 The Snappy-Go Authors.
  • diff --git a/internal/db/sqlite/db_test.go b/internal/db/sqlite/db_test.go index d67ceae37..bd549b835 100644 --- a/internal/db/sqlite/db_test.go +++ b/internal/db/sqlite/db_test.go @@ -863,12 +863,10 @@ func TestConcurrentUpdate(t *testing.T) { const n = 32 res := make([]error, n) var wg sync.WaitGroup - wg.Add(n) for i := range n { - go func() { + wg.Go(func() { res[i] = db.Update(folderID, protocol.DeviceID{byte(i), byte(i), byte(i)}, files) - wg.Done() - }() + }) } wg.Wait() for i, err := range res { diff --git a/lib/automaxprocs/automaxprocs.go b/lib/automaxprocs/automaxprocs.go deleted file mode 100644 index f6892fa0a..000000000 --- a/lib/automaxprocs/automaxprocs.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2024 The Syncthing Authors. -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this file, -// You can obtain one at https://mozilla.org/MPL/2.0/. - -package automaxprocs - -import ( - "go.uber.org/automaxprocs/maxprocs" -) - -func init() { - maxprocs.Set() -} diff --git a/lib/config/wrapper.go b/lib/config/wrapper.go index d2e9f1b8c..9ecf67a3a 100644 --- a/lib/config/wrapper.go +++ b/lib/config/wrapper.go @@ -329,12 +329,10 @@ func (w *wrapper) replaceLocked(to Configuration) (Waiter, error) { func (w *wrapper) notifyListeners(from, to Configuration) Waiter { wg := new(sync.WaitGroup) - wg.Add(len(w.subs)) for _, sub := range w.subs { - go func(committer Committer) { - w.notifyListener(committer, from, to) - wg.Done() - }(sub) + wg.Go(func() { + w.notifyListener(sub, from, to) + }) } return wg } diff --git a/lib/connections/connections_test.go b/lib/connections/connections_test.go index f04d90a5b..afb196b8b 100644 --- a/lib/connections/connections_test.go +++ b/lib/connections/connections_test.go @@ -337,23 +337,20 @@ func BenchmarkConnections(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { var wg sync.WaitGroup - wg.Add(2) errC := make(chan error, 2) - go func() { + wg.Go(func() { if _, err := client.Write(data); err != nil { errC <- err return } - wg.Done() - }() - go func() { + }) + wg.Go(func() { if _, err := io.ReadFull(server, data); err != nil { errC <- err return } total += sz - wg.Done() - }() + }) wg.Wait() close(errC) err := <-errC diff --git a/lib/connections/service.go b/lib/connections/service.go index f84af88a6..3c2d44f10 100644 --- a/lib/connections/service.go +++ b/lib/connections/service.go @@ -605,15 +605,13 @@ func (s *service) dialDevices(ctx context.Context, now time.Time, cfg config.Con dialWG.Wait() dialCancel() }() - for i := range queue { + for _, entry := range queue { select { case <-dialCtx.Done(): return default: } - dialWG.Add(1) - go func(entry dialQueueEntry) { - defer dialWG.Done() + dialWG.Go(func() { conn, ok := s.dialParallel(dialCtx, entry.id, entry.targets, dialSemaphore) if !ok { return @@ -630,7 +628,7 @@ func (s *service) dialDevices(ctx context.Context, now time.Time, cfg config.Con } } numConnsMut.Unlock() - }(queue[i]) + }) } } @@ -1118,12 +1116,8 @@ func (s *service) dialParallel(ctx context.Context, deviceID protocol.DeviceID, wg := sync.WaitGroup{} for _, tgt := range tgts { sema.Take(1) - wg.Add(1) - go func(tgt dialTarget) { - defer func() { - wg.Done() - sema.Give(1) - }() + wg.Go(func() { + defer sema.Give(1) conn, err := tgt.Dial(ctx) if err == nil { // Closes the connection on error @@ -1136,7 +1130,7 @@ func (s *service) dialParallel(ctx context.Context, deviceID protocol.DeviceID, l.Debugln("dialing", deviceID, tgt.uri, "success:", conn) res <- conn } - }(tgt) + }) } // Spawn a routine which will unblock main routine in case we fail diff --git a/lib/events/events_test.go b/lib/events/events_test.go index 13ba3ccc8..fbaad59c4 100644 --- a/lib/events/events_test.go +++ b/lib/events/events_test.go @@ -378,11 +378,8 @@ func TestUnsubscribeContention(t *testing.T) { stopListeners := make(chan struct{}) var listenerWg sync.WaitGroup - listenerWg.Add(listeners) for i := 0; i < listeners; i++ { - go func() { - defer listenerWg.Done() - + listenerWg.Go(func() { s := l.Subscribe(AllEvents) defer s.Unsubscribe() @@ -394,7 +391,7 @@ func TestUnsubscribeContention(t *testing.T) { return } } - }() + }) } // Start senders. These send pointless events until the stop channel is @@ -403,11 +400,8 @@ func TestUnsubscribeContention(t *testing.T) { stopSenders := make(chan struct{}) defer close(stopSenders) var senderWg sync.WaitGroup - senderWg.Add(senders) for i := 0; i < senders; i++ { - go func() { - defer senderWg.Done() - + senderWg.Go(func() { t := time.NewTicker(time.Millisecond) for { @@ -419,7 +413,7 @@ func TestUnsubscribeContention(t *testing.T) { return } } - }() + }) } // Give everything time to start up. diff --git a/lib/model/folder_sendrecv.go b/lib/model/folder_sendrecv.go index 6b3b05184..c63921177 100644 --- a/lib/model/folder_sendrecv.go +++ b/lib/model/folder_sendrecv.go @@ -256,36 +256,28 @@ func (f *sendReceiveFolder) pullerIteration(ctx context.Context, scanChan chan<- f.sl.DebugContext(ctx, "Starting puller iteration", "copiers", f.Copiers, "pullerPendingKiB", f.PullerMaxPendingKiB) - updateWg.Add(1) var changed int // only read after updateWg closes - go func() { + updateWg.Go(func() { // dbUpdaterRoutine finishes when dbUpdateChan is closed changed = f.dbUpdaterRoutine(dbUpdateChan) - updateWg.Done() - }() + }) for range f.Copiers { - copyWg.Add(1) - go func() { + copyWg.Go(func() { // copierRoutine finishes when copyChan is closed f.copierRoutine(ctx, copyChan, pullChan, finisherChan) - copyWg.Done() - }() + }) } - pullWg.Add(1) - go func() { + pullWg.Go(func() { // pullerRoutine finishes when pullChan is closed f.pullerRoutine(ctx, pullChan, finisherChan) - pullWg.Done() - }() + }) - doneWg.Add(1) // finisherRoutine finishes when finisherChan is closed - go func() { + doneWg.Go(func() { f.finisherRoutine(ctx, finisherChan, dbUpdateChan, scanChan) - doneWg.Done() - }() + }) fileDeletions, dirDeletions, err := f.processNeeded(ctx, dbUpdateChan, copyChan, scanChan) @@ -1534,14 +1526,10 @@ func (f *sendReceiveFolder) pullerRoutine(ctx context.Context, in <-chan pullBlo continue } - wg.Add(1) - - go func() { - defer wg.Done() + wg.Go(func() { defer requestLimiter.Give(bytes) - f.pullBlock(ctx, state, out) - }() + }) } wg.Wait() } diff --git a/lib/model/folder_sendrecv_test.go b/lib/model/folder_sendrecv_test.go index 8d4af5428..69344e6d8 100644 --- a/lib/model/folder_sendrecv_test.go +++ b/lib/model/folder_sendrecv_test.go @@ -463,11 +463,9 @@ func TestDeregisterOnFailInPull(t *testing.T) { copyChan, copyWg := startCopier(t.Context(), f, pullChan, finisherBufferChan) var pullWg sync.WaitGroup - pullWg.Add(1) - go func() { + pullWg.Go(func() { f.pullerRoutine(t.Context(), pullChan, finisherBufferChan) - pullWg.Done() - }() + }) go f.finisherRoutine(t.Context(), finisherChan, dbUpdateChan, make(chan string)) defer func() { // Unblock copier and puller @@ -1246,10 +1244,8 @@ func cleanupSharedPullerState(s *sharedPullerState) { func startCopier(ctx context.Context, f *sendReceiveFolder, pullChan chan<- pullBlockState, finisherChan chan<- *sharedPullerState) (chan copyBlocksState, *sync.WaitGroup) { copyChan := make(chan copyBlocksState) wg := new(sync.WaitGroup) - wg.Add(1) - go func() { + wg.Go(func() { f.copierRoutine(ctx, copyChan, pullChan, finisherChan) - wg.Done() - }() + }) return copyChan, wg } diff --git a/lib/model/model_test.go b/lib/model/model_test.go index 3ce4624b1..e132f08ec 100644 --- a/lib/model/model_test.go +++ b/lib/model/model_test.go @@ -993,15 +993,13 @@ func TestIssue5063(t *testing.T) { if fcfg, ok := m.cfg.Folder(id); !ok || !fcfg.SharedWith(device1) { t.Error("expected shared", id) } - wg.Done() } reps := 10 ids := make([]string, reps) for i := 0; i < reps; i++ { - wg.Add(1) ids[i] = srand.String(8) - go addAndVerify(ids[i]) + wg.Go(func() { addAndVerify(ids[i]) }) } finished := make(chan struct{}) @@ -2945,16 +2943,14 @@ func TestFolderRestartZombies(t *testing.T) { // for the commit to complete, but there are many of them. var wg sync.WaitGroup for i := 0; i < 25; i++ { - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { t0 := time.Now() for time.Since(t0) < time.Second { fcfg := folderCfg.Copy() fcfg.MaxConflicts = mrand.Int() // safe change that should cause a folder restart setFolder(t, wrapper, fcfg) } - }() + }) } // Wait for the above to complete and check how many folders we have diff --git a/lib/protocol/bufferpool_test.go b/lib/protocol/bufferpool_test.go index 56985905f..081725988 100644 --- a/lib/protocol/bufferpool_test.go +++ b/lib/protocol/bufferpool_test.go @@ -82,9 +82,7 @@ func TestStressBufferPool(t *testing.T) { var wg sync.WaitGroup fail := make(chan struct{}, routines) for i := 0; i < routines; i++ { - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { for time.Since(t0) < runtime { blocks := make([][]byte, 10) for i := range blocks { @@ -102,7 +100,7 @@ func TestStressBufferPool(t *testing.T) { bp.Put(blocks[i]) } } - }() + }) } wg.Wait() diff --git a/lib/protocol/protocol_test.go b/lib/protocol/protocol_test.go index f983bbfea..4873ec987 100644 --- a/lib/protocol/protocol_test.go +++ b/lib/protocol/protocol_test.go @@ -110,24 +110,18 @@ func TestCloseOnBlockingSend(t *testing.T) { wg := sync.WaitGroup{} - wg.Add(1) - go func() { + wg.Go(func() { c.ClusterConfig(&ClusterConfig{}, nil) - wg.Done() - }() + }) - wg.Add(1) - go func() { + wg.Go(func() { c.Close(errManual) - wg.Done() - }() + }) // This simulates an error from ping timeout - wg.Add(1) - go func() { + wg.Go(func() { c.internalClose(ErrTimeout) - wg.Done() - }() + }) done := make(chan struct{}) go func() { diff --git a/lib/syncthing/utils.go b/lib/syncthing/utils.go index ff0e82d5f..ad799377a 100644 --- a/lib/syncthing/utils.go +++ b/lib/syncthing/utils.go @@ -198,10 +198,8 @@ func TryMigrateDatabase(ctx context.Context, deleteRetention time.Duration) erro fis := make(chan protocol.FileInfo, 50) var writeErr error var wg sync.WaitGroup - wg.Add(1) writerDone := make(chan struct{}) - go func() { - defer wg.Done() + wg.Go(func() { //nolint:contextcheck defer close(writerDone) var batch []protocol.FileInfo files, blocks := 0, 0 @@ -238,7 +236,7 @@ func TryMigrateDatabase(ctx context.Context, deleteRetention time.Duration) erro slog.Info("Migrated folder", "folder", folder, "files", files, "blocks", blocks, "duration", d.Truncate(time.Second), "filesrate", float64(files)/d.Seconds()) totFiles += files totBlocks += blocks - }() + }) // Iterate the existing files fs, err := olddb.NewFileSet(folder, ll) diff --git a/lib/syncutil/timeoutcond_test.go b/lib/syncutil/timeoutcond_test.go index 5872a2716..65135ab18 100644 --- a/lib/syncutil/timeoutcond_test.go +++ b/lib/syncutil/timeoutcond_test.go @@ -48,16 +48,13 @@ func TestTimeoutCond(t *testing.T) { var results [routines][2]int var wg sync.WaitGroup for i := 0; i < routines; i++ { - i := i - wg.Add(1) - go func() { + wg.Go(func() { d := time.Duration(i) * timeMult * time.Millisecond t.Logf("Routine %d waits for %v\n", i, d) succ, fail := runLocks(t, iterations, c, d) results[i][0] = succ results[i][1] = fail - wg.Done() - }() + }) } wg.Wait() diff --git a/lib/upnp/upnp.go b/lib/upnp/upnp.go index 79b2e3e18..800218694 100644 --- a/lib/upnp/upnp.go +++ b/lib/upnp/upnp.go @@ -123,28 +123,26 @@ func Discover(ctx context.Context, _, timeout time.Duration) []nat.Device { continue } - wg.Add(1) // Discovery is done sequentially per interface because we discovered that // FritzBox routers return a broken result sometimes if the IPv4 and IPv6 // request arrive at the same time. - go func(iface net.Interface) { - defer wg.Done() - hasGUA, err := interfaceHasGUAIPv6(iface) + wg.Go(func() { + hasGUA, err := interfaceHasGUAIPv6(intf) if err != nil { - l.Debugf("Couldn't check for IPv6 GUAs on %s: %s", iface.Name, err) + l.Debugf("Couldn't check for IPv6 GUAs on %s: %s", intf.Name, err) //nolint:contextcheck } else if hasGUA { // Discover IPv6 gateways on interface. Only discover IGDv2, since IGDv1 // + IPv6 is not standardized and will lead to duplicates on routers. // Only do this when a non-link-local IPv6 is available. if we can't // enumerate the interface, the IPv6 code will not work anyway - discover(ctx, &iface, urnIgdV2, timeout, resultChan, true) + discover(ctx, &intf, urnIgdV2, timeout, resultChan, true) } // Discover IPv4 gateways on interface. for _, deviceType := range []string{urnIgdV2, urnIgdV1} { - discover(ctx, &iface, deviceType, timeout, resultChan, false) + discover(ctx, &intf, deviceType, timeout, resultChan, false) } - }(intf) + }) } go func() { diff --git a/script/copyrights.go b/script/copyrights.go index d0f171a72..89a78833e 100644 --- a/script/copyrights.go +++ b/script/copyrights.go @@ -59,8 +59,7 @@ var copyrightMap = map[string]string{ } var urlMap = map[string]string{ - "fontawesome.io": "https://github.com/FortAwesome/Font-Awesome", - "go.uber.org/automaxprocs": "https://github.com/uber-go/automaxprocs", + "fontawesome.io": "https://github.com/FortAwesome/Font-Awesome", // "go.uber.org/mock": "https://github.com/uber-go/mock", "google.golang.org/protobuf": "https://github.com/protocolbuffers/protobuf-go", // "gopkg.in/yaml.v2": "", // ignore, as gopkg.in/yaml.v3 supersedes diff --git a/test/delay_scan_test.go b/test/delay_scan_test.go index 224115b4b..e06271f05 100644 --- a/test/delay_scan_test.go +++ b/test/delay_scan_test.go @@ -43,17 +43,14 @@ func TestRescanWithDelay(t *testing.T) { var wg sync.WaitGroup log.Println("Starting scans...") for j := 0; j < 20; j++ { - j := j - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { err := st.RescanDelay("default", 1) log.Println(j) if err != nil { log.Println(err) t.Fatal(err) } - }() + }) } wg.Wait() diff --git a/test/parallel_scan_test.go b/test/parallel_scan_test.go index c4c17e5c0..e654fbff0 100644 --- a/test/parallel_scan_test.go +++ b/test/parallel_scan_test.go @@ -42,17 +42,14 @@ func TestRescanInParallel(t *testing.T) { var wg sync.WaitGroup log.Println("Starting scans...") for j := 0; j < 20; j++ { - j := j - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { err := st.Rescan("default") log.Println(j) if err != nil { log.Println(err) t.Fatal(err) } - }() + }) } wg.Wait()