Re: [Quickfix-developers] Already sent ResendRequest ... Not sending another.
Brought to you by:
orenmnero
|
From: Caleb E. <cal...@gm...> - 2006-01-03 11:58:00
|
On 1/2/06, Oren Miller <or...@qu...> wrote:
>
> I'm looking at SessionState::resendRequested, and see the following
> logic...
>
> bool resendRequested() const
> { return !(m_resendRange.first =3D=3D 0 && m_resendRange.second =3D=3D =
0); }
>
> Wouldn't this erroneously return false in the case where a resend
> request to INFINITY (defined as 0 in FIX.4.2. and later) is being
> processed? Shouldn't this just be { return m_resendRange.first !=3D 0; }=
?
The change I just made to generateResendRequest will ensure that the .secon=
d
member of the range is always initialized to a real sequence number, so the
code there is fine. What worries me though is the log Scott attached not
showing a message like "Processed QUEUED message: #". That is where the
Session code resets the resend range to (0, 0). So if the "Processing
QUEUED message" never shows up in the log, the range would still have
been (197648,
0) so changing SessionState::resendRequested wouldn't have fixed the bug.
I think the simplest and most reliable change is the one I made to
Session.cpp where the resendRange is initialized with a range of real
sequence numbers, and it not "open-ended" at the top (e.g. 0 or 9999999).
I am still slightly concerned however that there is a code-path by which
::nextQueued isn't being called before ::next. This says to me that the
logic for resetting the resend range belongs elsewhere.
--
Caleb Epstein
caleb dot epstein at gmail dot com
|