3
0
mirror of https://github.com/ergochat/ergo.git synced 2025-04-14 20:07:53 +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()
defer channel.mutex.Unlock()
f()
}
func (channel *Channel) Join(client *Client) {
channel.withMutex(func() {
channel.members.Add(client) channel.members.Add(client)
if len(channel.members) == 1 { if len(channel.members) == 1 {
channel.members[client][ChannelCreator] = true channel.members[client][ChannelCreator] = true
channel.members[client][ChannelOperator] = true channel.members[client][ChannelOperator] = true
} }
channel.mutex.Unlock()
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)