diff --git a/lib/model/model.go b/lib/model/model.go index b2e3ddfd8..2e92f6bf6 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -1022,7 +1022,6 @@ func (m *model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon } } - m.fmut.RLock() var paused []string for _, folder := range cm.Folders { cfg, ok := m.cfg.Folder(folder.ID) @@ -1048,7 +1047,9 @@ func (m *model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon if cfg.Paused { continue } + m.fmut.RLock() fs, ok := m.folderFiles[folder.ID] + m.fmut.RUnlock() if !ok { // Shouldn't happen because !cfg.Paused, but might happen // if the folder is about to be unpaused, but not yet. @@ -1122,9 +1123,11 @@ func (m *model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon // likely use delta indexes. We might already have files // that we need to pull so let the folder runner know // that it should recheck the index data. + m.fmut.RLock() if runner := m.folderRunners[folder.ID]; runner != nil { defer runner.SchedulePull() } + m.fmut.RUnlock() } } } @@ -1143,7 +1146,6 @@ func (m *model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon // implementing suture.IsCompletable). m.Add(is) } - m.fmut.RUnlock() m.pmut.Lock() m.remotePausedFolders[deviceID] = paused