lelegram: irc conn deadlock fix

Change-Id: I04b479c6ecb7e34cfcc5b8e43c6315893252e4e5
master
q3k 2020-01-22 21:47:25 +01:00
parent 572d766096
commit 9377313ae0
1 changed files with 11 additions and 11 deletions

View File

@ -157,7 +157,13 @@ func (i *ircconn) loop(ctx context.Context) {
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 @@ func (i *ircconn) loop(ctx context.Context) {
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 @@ func (i *ircconn) loop(ctx context.Context) {
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 @@ func (i *ircconn) loop(ctx context.Context) {
case <-t.C:
if !connected {
glog.Errorf("IRC/%s/info: connection timed out, dying", i.user)
die()
die(fmt.Errorf("connection timeout"))
return
}
}