It seems it’s connected via quic rather than TCP which might mean something, but I also believe you run your devices with abysmally small rate limits, correct?
The actual lockup is caused by:
goroutine 24 [select, 3 minutes]:
github.com/syncthing/syncthing/lib/protocol.(*rawConnection).send(0xc0001b4410, 0x10f9720, 0xc000400380, 0x10f9d60, 0xc0093ec060, 0x0, 0x0)
C:/syncthing/lib/protocol/protocol.go:656 +0x15c
github.com/syncthing/syncthing/lib/protocol.(*rawConnection).DownloadProgress(0xc0001b4410, 0x10f9720, 0xc000400380, 0xc00d1d1f30, 0xb, 0xc009071d60, 0x1, 0x1)
C:/syncthing/lib/protocol/protocol.go:344 +0xbe
github.com/syncthing/syncthing/lib/model.(*ProgressEmitter).sendDownloadProgressMessagesLocked(0xc0001e8280, 0x10f9720, 0xc000400380)
C:/syncthing/lib/model/progressemitter.go:152 +0x59c
github.com/syncthing/syncthing/lib/model.(*ProgressEmitter).serve(0xc0001e8280, 0x10f9720, 0xc000400380)
C:/syncthing/lib/model/progressemitter.go:92 +0x5d5
github.com/syncthing/syncthing/lib/util.AsService.func1(0x10f9720, 0xc000400380, 0xc000f5c420, 0x19)
C:/syncthing/lib/util/utils.go:183 +0x40
github.com/syncthing/syncthing/lib/util.(*service).Serve(0xc000414b40)
C:/syncthing/lib/util/utils.go:247 +0x149
github.com/thejerf/suture.(*Supervisor).runService.func1(0xc000407950, 0xc000000000, 0x10ef660, 0xc0001e8280)
C:/go/pkg/mod/github.com/thejerf/suture@v3.0.2+incompatible/supervisor.go:600 +0x57
created by github.com/thejerf/suture.(*Supervisor).runService
C:/go/pkg/mod/github.com/thejerf/suture@v3.0.2+incompatible/supervisor.go:588 +0x62
goroutine 40074 [semacquire]:
sync.runtime_SemacquireMutex(0xc0003f87cc, 0xc00549e600, 0x1)
c:/go/src/runtime/sema.go:71 +0x4e
sync.(*Mutex).lockSlow(0xc0003f87c8)
c:/go/src/sync/mutex.go:138 +0x103
sync.(*Mutex).Lock(0xc0003f87c8)
c:/go/src/sync/mutex.go:81 +0x4e
github.com/syncthing/syncthing/lib/model.(*ProgressEmitter).BytesCompleted(0xc0001e8280, 0xc0094088bb, 0xb, 0x0)
C:/syncthing/lib/model/progressemitter.go:263 +0x5c
github.com/syncthing/syncthing/lib/model.(*model).FolderProgressBytesCompleted(0xc0003ebb00, 0xc0094088bb, 0xb, 0xf)
C:/syncthing/lib/model/model.go:853 +0x4d
github.com/syncthing/syncthing/lib/model.(*folderSummaryService).Summary(0xc000076b40, 0xc0094088bb, 0xb, 0x6, 0xc000152b88, 0xc0094e7924)
C:/syncthing/lib/model/folder_summary.go:112 +0x951
github.com/syncthing/syncthing/lib/api.(*service).getDBStatus(0xc000152dc0, 0x10f7260, 0xc00016aa80, 0xc00018ef00)
C:/syncthing/lib/api/api.go:692 +0x71
net/http.HandlerFunc.ServeHTTP(0xc000f4a150, 0x10f7260, 0xc00016aa80, 0xc00018ef00)
c:/go/src/net/http/server.go:2007 +0x4b
net/http.(*ServeMux).ServeHTTP(0xc000be0d00, 0x10f7260, 0xc00016aa80, 0xc00018ef00)
c:/go/src/net/http/server.go:2387 +0x1c4
github.com/syncthing/syncthing/lib/api.getPostHandler.func1(0x10f7260, 0xc00016aa80, 0xc00018ef00)
Which is effectively a component that the GUI needs to access, which is stuck on sending data.