• G
    [DCCP]: Fix BUG in retransmission delay calculation · 76d12777
    Gerrit Renker 提交于
    This bug resulted in ccid3_hc_tx_send_packet returning negative
    delay values, which in turn triggered silently dequeueing packets in
    dccp_write_xmit. As a result, only a few out of the submitted packets made
    it at all onto the network.  Occasionally, when dccp_wait_for_ccid was
    involved, this also triggered a bug warning since ccid3_hc_tx_send_packet
    returned a negative value (which in reality was a negative delay value).
    
    The cause for this bug lies in the comparison
    
     if (delay >= hctx->ccid3hctx_delta)
    	return delay / 1000L;
    
    The type of `delay' is `long', that of ccid3hctx_delta is `u32'. When comparing
    negative long values against u32 values, the test returned `true' whenever delay
    was smaller than 0 (meaning the packet was overdue to send).
    
    The fix is by casting, subtracting, and then testing the difference with
    regard to 0.
    
    This has been tested and shown to work.
    Signed-off-by: NGerrit Renker <gerrit@erg.abdn.ac.uk>
    Signed-off-by: NIan McDonald <ian.mcdonald@jandi.co.nz>
    Signed-off-by: NArnaldo Carvalho de Melo <acme@mandriva.com>
    76d12777
ccid3.c 36.3 KB