lelegram: irc conn deadlock fix
Change-Id: I04b479c6ecb7e34cfcc5b8e43c6315893252e4e5
diff --git a/personal/q3k/lelegram/irc/conn.go b/personal/q3k/lelegram/irc/conn.go
index a59e754..7f130ca 100644
--- a/personal/q3k/lelegram/irc/conn.go
+++ b/personal/q3k/lelegram/irc/conn.go
@@ -157,7 +157,13 @@
connected := false
dead := false
- die := func() {
+ die := func(err error) {
+ // drain queue of say messages...
+ for _, s := range sayqueue {
+ glog.Infof("IRC/%s/say: [drop] %q", i.user, s.message)
+ s.done <- err
+ }
+ sayqueue = []*controlMessage{}
dead = true
i.conn.Close()
go i.eventHandler(&event{
@@ -200,7 +206,7 @@
case <-i.eq:
glog.Infof("IRC/%s/info: got evicted", i.user)
- die()
+ die(fmt.Errorf("evicted"))
return
case m := <-i.iq:
@@ -230,18 +236,12 @@
go i.eventHandler(&event{
banned: &eventBanned{i},
})
- // drain queue of say messages...
- for _, s := range sayqueue {
- glog.Infof("IRC/%s/say: [drop] %q", i.user, s.message)
- s.done <- nil
- }
- sayqueue = []*controlMessage{}
- die()
+ die(nil)
return
case m.Command == "KICK" && m.Params[1] == i.irc.CurrentNick():
glog.Infof("IRC/%s/info: got kicked", i.user)
- die()
+ die(nil)
return
case m.Command == "PRIVMSG" && m.Params[0] == i.channel:
@@ -274,7 +274,7 @@
case <-t.C:
if !connected {
glog.Errorf("IRC/%s/info: connection timed out, dying", i.user)
- die()
+ die(fmt.Errorf("connection timeout"))
return
}
}