forked from hswaw/hscloud
lelegram: irc conn deadlock fix
Change-Id: I04b479c6ecb7e34cfcc5b8e43c6315893252e4e5
This commit is contained in:
parent
572d766096
commit
9377313ae0
1 changed files with 11 additions and 11 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue