Forráskód Böngészése

lib/model, lib/protocol: Sequence ClusterConfig properly (fixes #3448)

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3452
Jakob Borg 9 éve
szülő
commit
aafc96f58f
2 módosított fájl, 5 hozzáadás és 2 törlés
  1. 4 1
      lib/model/model.go
  2. 1 1
      lib/protocol/protocol.go

+ 4 - 1
lib/model/model.go

@@ -649,8 +649,11 @@ func (m *Model) ClusterConfig(deviceID protocol.DeviceID, cm protocol.ClusterCon
 	tempIndexFolders := make([]string, 0, len(cm.Folders))
 	tempIndexFolders := make([]string, 0, len(cm.Folders))
 
 
 	m.pmut.RLock()
 	m.pmut.RLock()
-	conn := m.conn[deviceID]
+	conn, ok := m.conn[deviceID]
 	m.pmut.RUnlock()
 	m.pmut.RUnlock()
+	if !ok {
+		panic("bug: ClusterConfig called on closed or nonexistent connection")
+	}
 
 
 	m.fmut.Lock()
 	m.fmut.Lock()
 	for _, folder := range cm.Folders {
 	for _, folder := range cm.Folders {

+ 1 - 1
lib/protocol/protocol.go

@@ -302,7 +302,7 @@ func (c *rawConnection) readerLoop() (err error) {
 			if state != stateInitial {
 			if state != stateInitial {
 				return fmt.Errorf("protocol error: cluster config message in state %d", state)
 				return fmt.Errorf("protocol error: cluster config message in state %d", state)
 			}
 			}
-			go c.receiver.ClusterConfig(c.id, *msg)
+			c.receiver.ClusterConfig(c.id, *msg)
 			state = stateReady
 			state = stateReady
 
 
 		case *Index:
 		case *Index: