question in tcp_do_segment()

Sepherosa Ziehau sepherosa at gmail.com
Mon Jul 16 01:53:10 UTC 2012


On Sun, Jul 15, 2012 at 11:47 PM, Reese Faucette <reese at myri.com> wrote:
> On 7/15/2012 3:26 AM, Sepherosa Ziehau wrote:
>
>> !tcp_timer_active() means that the connection's retransmit timer is
>> not _set_ yet (please note, it is _not_ "has fired").  As far as I
>> understand this code, it in turn means that this connection doesn't
>> have any segments that were sent but not yet ACKed.
>
>
> You'd think that was the case from the name, but tcp_timer_active() calls
> callout_active() which checks for fired.  If you want to check for "timer

Hmm, callout_active() is not used to check for whether the callout is
fired or not; it is used to check whether callout_reset() has been
called but callout_stop() is not yet been called.  IMO,
callout_reset() is "set" the callout, callout_stop() is "unset" the
callout.

AFAIR, callout_pending() is kinda check for whether the callback
function of the callout "is being executed" or not (PENDING bit is
probably cleared immediately before running the callback function).

Best Regards,
sephe

> set" you need to use callout_pending().
> -reese
>
>



-- 
Tomorrow Will Never Die


More information about the freebsd-net mailing list