mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 10:58:57 +00:00
fix(model): prevent division by zero in numHashers (#9744)
This should prevent the panic that occurred in this test run: https://github.com/syncthing/syncthing/actions/runs/11095876010/job/30825046810 ``` 2024-09-29T21:01:53.5425372Z === RUN TestIssue4357 2024-09-29T21:01:53.5505943Z panic: runtime error: integer divide by zero [recovered] 2024-09-29T21:01:53.5512200Z panic: runtime error: integer divide by zero 2024-09-29T21:01:53.5516633Z 2024-09-29T21:01:53.5523018Z goroutine 2655 [running]: 2024-09-29T21:01:53.5524157Z github.com/thejerf/suture/v4.(*Supervisor).runService.func2.2() 2024-09-29T21:01:53.5527176Z /home/runner/go/pkg/mod/github.com/thejerf/suture/v4@v4.0.5/supervisor.go:563 +0xd0 2024-09-29T21:01:53.5530556Z panic({0x1080d20?, 0x1851290?}) 2024-09-29T21:01:53.5564723Z /home/runner/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.1.linux-amd64/src/runtime/panic.go:785 +0x132 2024-09-29T21:01:53.5566616Z github.com/syncthing/syncthing/lib/model.(*model).numHashers(0xc0006f6180, {0x117dc1a, 0x7}) 2024-09-29T21:01:53.5568061Z /home/runner/work/syncthing/syncthing/lib/model/model.go:2581 +0x210 2024-09-29T21:01:53.5569912Z github.com/syncthing/syncthing/lib/model.(*folder).scanSubdirsChangedAndNew(0xc00c38c808, {0x0, 0x0, 0x0}, 0xc0003fc060) 2024-09-29T21:01:53.5571612Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:653 +0x250 2024-09-29T21:01:53.5573010Z github.com/syncthing/syncthing/lib/model.(*folder).scanSubdirs(0xc00c38c808, {0x0, 0x0, 0x0}) 2024-09-29T21:01:53.5574447Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:512 +0xd0f 2024-09-29T21:01:53.5576011Z github.com/syncthing/syncthing/lib/model.(*folder).scanTimerFired(0xc00c38c808) 2024-09-29T21:01:53.5577367Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:916 +0x46 2024-09-29T21:01:53.5579010Z github.com/syncthing/syncthing/lib/model.(*folder).Serve(0xc00c38c808, {0x1307650, 0xc0006a0910}) 2024-09-29T21:01:53.5580428Z /home/runner/work/syncthing/syncthing/lib/model/folder.go:205 +0xd7e 2024-09-29T21:01:53.5581624Z github.com/thejerf/suture/v4.(*Supervisor).runService.func2() 2024-09-29T21:01:53.5582978Z /home/runner/go/pkg/mod/github.com/thejerf/suture/v4@v4.0.5/supervisor.go:567 +0x249 2024-09-29T21:01:53.5584400Z created by github.com/thejerf/suture/v4.(*Supervisor).runService in goroutine 2651 2024-09-29T21:01:53.5585872Z /home/runner/go/pkg/mod/github.com/thejerf/suture/v4@v4.0.5/supervisor.go:541 +0x32a 2024-09-29T21:01:53.5661413Z FAIL github.com/syncthing/syncthing/lib/model 5.510s ``` ### Testing I have not been able to reproduce the panic throughout a few minutes of continuously running the test without this fix, but judging by the traceback it seems to only happen if the test happens to delete the folder from config at the same time `scanTimerFired` triggers.
This commit is contained in:
parent
39df3173d4
commit
fb939ec496
@ -2561,7 +2561,7 @@ func (m *model) DelayScan(folder string, next time.Duration) {
|
|||||||
func (m *model) numHashers(folder string) int {
|
func (m *model) numHashers(folder string) int {
|
||||||
m.mut.RLock()
|
m.mut.RLock()
|
||||||
folderCfg := m.folderCfgs[folder]
|
folderCfg := m.folderCfgs[folder]
|
||||||
numFolders := len(m.folderCfgs)
|
numFolders := max(1, len(m.folderCfgs))
|
||||||
m.mut.RUnlock()
|
m.mut.RUnlock()
|
||||||
|
|
||||||
if folderCfg.Hashers > 0 {
|
if folderCfg.Hashers > 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user