@@ -297,6 +297,10 @@ func (s *session) notifyMessageOut() {
297297
298298// send will validate, persist, queue the message. If the session is logged on, send all messages in the queue.
299299func (s * session ) send (msg * Message ) error {
300+ if err := s .isResendRequestBlocking (msg ); err != nil {
301+ return err
302+ }
303+
300304 return s .sendInReplyTo (msg , nil )
301305}
302306func (s * session ) sendInReplyTo (msg * Message , inReplyTo * Message ) error {
@@ -307,12 +311,6 @@ func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
307311 s .sendMutex .Lock ()
308312 defer s .sendMutex .Unlock ()
309313
310- if blocked , err := s .isResendRequestBlocking (msg ); err != nil {
311- return err
312- } else if blocked {
313- return nil
314- }
315-
316314 msgBytes , err := s .prepMessageForSend (msg , inReplyTo )
317315 if err != nil {
318316 return err
@@ -324,18 +322,18 @@ func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
324322 return nil
325323}
326324
327- func (s * session ) isResendRequestBlocking (msg * Message ) ( bool , error ) {
325+ func (s * session ) isResendRequestBlocking (msg * Message ) error {
328326 msgType , err := msg .Header .GetBytes (tagMsgType )
329327 if err != nil {
330- return false , err
328+ return err
331329 }
332330
333331 if s .isResendRequestActive && ! bytes .Equal (msgType , msgTypeResendRequest ) {
334332 s .log .OnEvent ("Message blocked: resend request in progress" )
335- return true , errors .New ("cannot send message while resend request is active" )
333+ return errors .New ("cannot send message while resend request is active" )
336334 }
337335
338- return false , nil
336+ return nil
339337}
340338
341339// dropAndReset will drop the send queue and reset the message store.
@@ -465,12 +463,12 @@ func (s *session) sendBytes(msg []byte, blockUntilSent bool) bool {
465463 }
466464}
467465
468- func (s * session ) doTargetTooHigh (reject targetTooHigh ) (nextState resendState , err error ) {
466+ func (s * session ) doTargetTooHigh (reject targetTooHigh , isReject bool ) (nextState resendState , err error ) {
469467 s .log .OnEventf ("MsgSeqNum too high, expecting %v but received %v" , reject .ExpectedTarget , reject .ReceivedTarget )
470- return s .sendResendRequest (reject .ExpectedTarget , reject .ReceivedTarget - 1 )
468+ return s .sendResendRequest (reject .ExpectedTarget , reject .ReceivedTarget - 1 , isReject )
471469}
472470
473- func (s * session ) sendResendRequest (beginSeq , endSeq int ) (nextState resendState , err error ) {
471+ func (s * session ) sendResendRequest (beginSeq , endSeq int , isReject bool ) (nextState resendState , err error ) {
474472 nextState .resendRangeEnd = endSeq
475473
476474 resend := NewMessage ()
@@ -499,7 +497,9 @@ func (s *session) sendResendRequest(beginSeq, endSeq int) (nextState resendState
499497 return
500498 }
501499 s .log .OnEventf ("Sent ResendRequest FROM: %v TO: %v" , beginSeq , endSeqNo )
502- s .isResendRequestActive = true
500+ if ! isReject {
501+ s .isResendRequestActive = true
502+ }
503503
504504 return
505505}
0 commit comments