Browse Source

Only connected devices are available devices

Audrius Butkevicius 11 years ago
parent
commit
fc47562983
1 changed files with 13 additions and 1 deletions
  1. 13 1
      internal/model/model.go

+ 13 - 1
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 {