Skip to content

Commit b038361

Browse files
author
Igor
committed
add stop chan to escape writing deadlock of s.sessionEvent
1 parent 7945e4b commit b038361

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

session.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,9 +738,22 @@ func (s *session) onAdmin(msg interface{}) {
738738

739739
func (s *session) run() {
740740
s.Start(s)
741+
var stopChan = make(chan struct{})
742+
s.stateTimer = internal.NewEventTimer(func() {
743+
select {
744+
//deadlock in write to chan s.sessionEvent after s.Stopped()==true and end of loop session.go:766 because no reader of chan s.sessionEvent
745+
case s.sessionEvent <- internal.NeedHeartbeat:
746+
case <-stopChan:
747+
}
748+
})
749+
s.peerTimer = internal.NewEventTimer(func() {
750+
select {
751+
//deadlock in write to chan s.sessionEvent after s.Stopped()==true and end of loop session.go:766 because no reader of chan s.sessionEvent
752+
case s.sessionEvent <- internal.PeerTimeout:
753+
case <-stopChan:
754+
}
741755

742-
s.stateTimer = internal.NewEventTimer(func() { s.sessionEvent <- internal.NeedHeartbeat })
743-
s.peerTimer = internal.NewEventTimer(func() { s.sessionEvent <- internal.PeerTimeout })
756+
})
744757
ticker := time.NewTicker(time.Second)
745758

746759
defer func() {

0 commit comments

Comments
 (0)