Skip to content

Commit 728212c

Browse files
committed
Fire special event to break waiting select and send queued messages immediately
1 parent 4cda768 commit 728212c

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

session.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type session struct {
2424
sendMutex sync.Mutex
2525

2626
sessionEvent chan event
27+
messageEvent chan bool
2728
application Application
2829
sessionState
2930
stateTimer eventTimer
@@ -101,6 +102,7 @@ func createSession(sessionID SessionID, storeFactory MessageStoreFactory, settin
101102
}
102103

103104
session.sessionEvent = make(chan event)
105+
session.messageEvent = make(chan bool)
104106
session.application = application
105107
session.stateTimer = eventTimer{Task: func() { session.sessionEvent <- needHeartbeat }}
106108
session.peerTimer = eventTimer{Task: func() { session.sessionEvent <- peerTimeout }}
@@ -169,6 +171,10 @@ func (s *session) queueForSend(msg Message) {
169171
s.sendMutex.Lock()
170172
defer s.sendMutex.Unlock()
171173
s.toSend = append(s.toSend, msg)
174+
select {
175+
case s.messageEvent <- true:
176+
default:
177+
}
172178
}
173179

174180
//sends queued messages if session is logged on
@@ -553,6 +559,7 @@ func (s *session) run(msgIn chan fixIn, msgOut chan []byte, quit chan bool) {
553559

554560
case evt := <-s.sessionEvent:
555561
s.sessionState = s.Timeout(s, evt)
562+
case <-s.messageEvent:
556563
}
557564
}
558565
}

0 commit comments

Comments
 (0)