3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-14 07:59:31 +01:00

fix a deadlock in CS AMODE

This commit is contained in:
Shivaram Lingamneni 2019-04-07 02:12:14 -04:00
parent 8c7027c604
commit a729772f0c

View File

@ -261,6 +261,13 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
return l == r || umodeGreaterThan(l, r) return l == r || umodeGreaterThan(l, r)
} }
changed := false
defer func() {
if changed {
channel.MarkDirty(IncludeLists)
}
}()
account := client.Account() account := client.Account()
isOperChange := client.HasRoleCapabs("chanreg") isOperChange := client.HasRoleCapabs("chanreg")
@ -290,14 +297,14 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
case modes.Add: case modes.Add:
if targetModeNow != targetModeAfter { if targetModeNow != targetModeAfter {
channel.accountToUMode[change.Arg] = change.Mode channel.accountToUMode[change.Arg] = change.Mode
channel.MarkDirty(IncludeLists) changed = true
return []modes.ModeChange{change}, nil return []modes.ModeChange{change}, nil
} }
return nil, nil return nil, nil
case modes.Remove: case modes.Remove:
if targetModeNow == change.Mode { if targetModeNow == change.Mode {
delete(channel.accountToUMode, change.Arg) delete(channel.accountToUMode, change.Arg)
channel.MarkDirty(IncludeLists) changed = true
return []modes.ModeChange{change}, nil return []modes.ModeChange{change}, nil
} }
return nil, nil return nil, nil