forked from External/ergo
fix a deadlock in CS AMODE
This commit is contained in:
parent
8c7027c604
commit
a729772f0c
1 changed files with 9 additions and 2 deletions
11
irc/modes.go
11
irc/modes.go
|
|
@ -261,6 +261,13 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
|
|||
return l == r || umodeGreaterThan(l, r)
|
||||
}
|
||||
|
||||
changed := false
|
||||
defer func() {
|
||||
if changed {
|
||||
channel.MarkDirty(IncludeLists)
|
||||
}
|
||||
}()
|
||||
|
||||
account := client.Account()
|
||||
isOperChange := client.HasRoleCapabs("chanreg")
|
||||
|
||||
|
|
@ -290,14 +297,14 @@ func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes
|
|||
case modes.Add:
|
||||
if targetModeNow != targetModeAfter {
|
||||
channel.accountToUMode[change.Arg] = change.Mode
|
||||
channel.MarkDirty(IncludeLists)
|
||||
changed = true
|
||||
return []modes.ModeChange{change}, nil
|
||||
}
|
||||
return nil, nil
|
||||
case modes.Remove:
|
||||
if targetModeNow == change.Mode {
|
||||
delete(channel.accountToUMode, change.Arg)
|
||||
channel.MarkDirty(IncludeLists)
|
||||
changed = true
|
||||
return []modes.ModeChange{change}, nil
|
||||
}
|
||||
return nil, nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue