Hackish fix so we don't try to close nil or closed channels.
This commit is contained in:
parent
61b3b8122c
commit
6274ab9053
1 changed files with 40 additions and 2 deletions
42
wsapi.go
42
wsapi.go
|
@ -114,7 +114,33 @@ func (s *Session) Listen() (err error) {
|
||||||
s.listenChan = make(chan struct{})
|
s.listenChan = make(chan struct{})
|
||||||
s.listenLock.Unlock()
|
s.listenLock.Unlock()
|
||||||
|
|
||||||
defer close(s.heartbeatChan)
|
// this is ugly.
|
||||||
|
defer func() {
|
||||||
|
if s.listenChan == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
case <-s.listenChan:
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
close(s.listenChan)
|
||||||
|
}
|
||||||
|
s.listenChan = nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
// this is ugly.
|
||||||
|
defer func() {
|
||||||
|
if s.heartbeatChan == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
case <-s.heartbeatChan:
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
close(s.heartbeatChan)
|
||||||
|
}
|
||||||
|
s.listenChan = nil
|
||||||
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
messageType, message, err := s.wsConn.ReadMessage()
|
messageType, message, err := s.wsConn.ReadMessage()
|
||||||
|
@ -506,7 +532,19 @@ func (s *Session) Heartbeat(i time.Duration) {
|
||||||
s.heartbeatChan = make(chan struct{})
|
s.heartbeatChan = make(chan struct{})
|
||||||
s.heartbeatLock.Unlock()
|
s.heartbeatLock.Unlock()
|
||||||
|
|
||||||
defer close(s.heartbeatChan)
|
// this is ugly.
|
||||||
|
defer func() {
|
||||||
|
if s.heartbeatChan == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
case <-s.heartbeatChan:
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
close(s.heartbeatChan)
|
||||||
|
}
|
||||||
|
s.listenChan = nil
|
||||||
|
}()
|
||||||
|
|
||||||
// send first heartbeat immediately because lag could put the
|
// send first heartbeat immediately because lag could put the
|
||||||
// first heartbeat outside the required heartbeat interval window
|
// first heartbeat outside the required heartbeat interval window
|
||||||
|
|
Loading…
Reference in a new issue