|
|
@@ -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
|