diff --git a/internal/model/model.go b/internal/model/model.go index bb08f326..2650e9ee 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -1273,6 +1273,11 @@ func (m *Model) RemoteLocalVersion(folder string) uint64 { } func (m *Model) availability(folder string, file string) []protocol.DeviceID { + // Acquire this lock first, as the value returned from foldersFiles can + // gen heavily modified on Close() + m.pmut.RLock() + defer m.pmut.RUnlock() + m.fmut.RLock() fs, ok := m.folderFiles[folder] m.fmut.RUnlock() @@ -1280,7 +1285,14 @@ func (m *Model) availability(folder string, file string) []protocol.DeviceID { return nil } - return fs.Availability(file) + availableDevices := []protocol.DeviceID{} + for _, device := range fs.Availability(file) { + _, ok := m.protoConn[device] + if ok { + availableDevices = append(availableDevices, device) + } + } + return availableDevices } func (m *Model) String() string {