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
 			}
 		}