don't allow send on closed channels

This commit is contained in:
Jeremy Latt 2014-02-13 09:35:59 -08:00
parent ca25828804
commit 7a2c9db503
3 changed files with 17 additions and 1 deletions

View File

@ -53,14 +53,26 @@ func (channel *Channel) Destroy() {
}
close(channel.replies)
channel.replies = nil
close(channel.commands)
channel.commands = nil
channel.server.channels.Remove(channel)
channel.destroyed = true
}
func (channel *Channel) Command(command ChannelCommand) {
if channel.commands == nil {
return
}
channel.commands <- command
}
func (channel *Channel) Reply(replies ...Reply) {
if channel.replies == nil {
return
}
for _, reply := range replies {
channel.replies <- reply
}

View File

@ -161,6 +161,7 @@ func (client *Client) Destroy() {
client.conn.Close()
close(client.replies)
client.replies = nil
if client.idleTimer != nil {
client.idleTimer.Stop()
@ -177,6 +178,9 @@ func (client *Client) Destroy() {
}
func (client *Client) Reply(replies ...Reply) {
if client.replies == nil {
return
}
for _, reply := range replies {
client.replies <- reply
}

View File

@ -292,7 +292,7 @@ func (m *JoinCommand) HandleServer(s *Server) {
cmd := &PartCommand{}
cmd.SetClient(c)
for channel := range c.channels {
channel.commands <- cmd
channel.Command(cmd)
}
return
}