Skip to content

Commit e954566

Browse files
add comments around resendMutex logic
1 parent 1607e8b commit e954566

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

in_session.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ func (state inSession) resendMessages(session *session, beginSeqNo, endSeqNo int
230230
return state.generateSequenceReset(session, beginSeqNo, endSeqNo+1, inReplyTo)
231231
}
232232

233+
// resendMutex must always be locked before sendMutex to prevent a potential deadlock
234+
// sendMutex is locked below in session.EnqueueBytesAndSend()
233235
session.resendMutex.Lock()
234236
defer session.resendMutex.Unlock()
235237

session.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ type session struct {
4040
toSend [][]byte
4141

4242
// Mutex for access to toSend.
43-
sendMutex sync.Mutex
43+
sendMutex sync.Mutex
44+
// Mutex to prevent messages being sent when resendRequest is active
45+
// Must be locked before sendMutex to prevent a potential deadlock
4446
resendMutex sync.RWMutex
4547

4648
sessionEvent chan internal.Event
@@ -303,6 +305,7 @@ func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
303305
return s.queueForSend(msg)
304306
}
305307

308+
// resendMutex must always be locked before sendMutex to prevent a potential deadlock
306309
s.resendMutex.RLock()
307310
defer s.resendMutex.RUnlock()
308311

0 commit comments

Comments
 (0)