3
0
mirror of https://github.com/ergochat/ergo.git synced 2025-04-13 11:27:52 +02:00

fix another race

This commit is contained in:
Jeremy Latt 2014-02-15 20:01:28 -08:00
parent ae02596214
commit 213afc0481

View File

@ -186,16 +186,22 @@ func (channel *Channel) ModeString() (str string) {
return return
} }
func (channel *Channel) Join(client *Client) { func (channel *Channel) withMutex(f func()) {
channel.mutex.Lock() channel.mutex.Lock()
channel.members.Add(client) defer channel.mutex.Unlock()
if len(channel.members) == 1 { f()
channel.members[client][ChannelCreator] = true }
channel.members[client][ChannelOperator] = true
} func (channel *Channel) Join(client *Client) {
channel.mutex.Unlock() channel.withMutex(func() {
channel.members.Add(client)
if len(channel.members) == 1 {
channel.members[client][ChannelCreator] = true
channel.members[client][ChannelOperator] = true
}
client.channels.Add(channel)
})
client.channels.Add(channel)
channel.Reply(RplJoin(client, channel)) channel.Reply(RplJoin(client, channel))
channel.GetTopic(client) channel.GetTopic(client)
channel.GetUsers(client) channel.GetUsers(client)