Maybe fix concurrent map write

This commit is contained in:
Neil Alexander 2022-08-02 16:33:20 +01:00
parent 060b54add9
commit da0dbb8362
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -430,23 +430,28 @@ func (a *KeyInternalAPI) queryRemoteKeys(
for result := range resultCh {
for userID, nest := range result.DeviceKeys {
respMu.Lock()
res.DeviceKeys[userID] = make(map[string]json.RawMessage)
respMu.Unlock()
for deviceID, deviceKey := range nest {
keyJSON, err := json.Marshal(deviceKey)
if err != nil {
continue
}
respMu.Lock()
res.DeviceKeys[userID][deviceID] = keyJSON
respMu.Unlock()
}
}
respMu.Lock()
for userID, body := range result.MasterKeys {
res.MasterKeys[userID] = body
}
for userID, body := range result.SelfSigningKeys {
res.SelfSigningKeys[userID] = body
}
respMu.Unlock()
// TODO: do we want to persist these somewhere now
// that we have fetched them?
@ -520,7 +525,10 @@ func (a *KeyInternalAPI) queryRemoteKeysOnServer(
resultCh <- &queryKeysResp
return
}
respMu.Lock()
defer respMu.Unlock()
res.Failures[serverName] = map[string]interface{}{
"message": err.Error(),
}
@ -537,8 +545,6 @@ func (a *KeyInternalAPI) queryRemoteKeysOnServer(
if len(res.DeviceKeys) > 0 {
delete(res.Failures, serverName)
}
respMu.Unlock()
}
func (a *KeyInternalAPI) populateResponseWithDeviceKeysFromDatabase(