From ab8c2fb5c7189722e4fb2afe53ccdc7b0a3771c3 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Sat, 12 Aug 2017 17:10:43 +0000 Subject: [PATCH] lib/model: Fix race in GetIgnores (fixes #4300) In addition this function returned an error when .stignore file was not present, which is perfectly valid. Also removed inconsistent nil check in ignores.go (only relevant for tests) and adjusted walk.go to do what it says in comments (check if Matcher is nil) to prevent nil deref in tests. Originally reported in: https://forum.syncthing.net/t/reason-for-panic-maybe-too-little-ram/10346 Regression from #3996 GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4301 --- lib/model/model.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/model/model.go b/lib/model/model.go index 7f69c205..4c1c77ac 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -1245,16 +1245,15 @@ func (m *Model) ConnectedTo(deviceID protocol.DeviceID) bool { func (m *Model) GetIgnores(folder string) ([]string, []string, error) { m.fmut.RLock() + defer m.fmut.RUnlock() + cfg, ok := m.folderCfgs[folder] - m.fmut.RUnlock() if ok { if !cfg.HasMarker() { return nil, nil, fmt.Errorf("Folder %s stopped", folder) } - m.fmut.RLock() ignores := m.folderIgnores[folder] - m.fmut.RUnlock() return ignores.Lines(), ignores.Patterns(), nil }