In this case, what will happen is diff will be < 7, so diff / 8 will be 0. As a result, peer -> roundTripTime -= diff / 8; will never result in the SRTT decreasing.
The effect of this bug is that the SRTT is effectively latched at 8 ms if it has ever exceeded 8 ms, even if the actual RTT has dropped back below 8 ms.
The RTT variance is also affected by a similar bug when peer -> roundTripTimeVariance is < 4, because peer -> roundTripTimeVariance / 4 will be 0.
The SRTT and RTT variance logic (shown below) does not properly handle the case where the
peer->roundTripTime >= 8
androundTripTime < 8
. https://github.com/lsalzman/enet/blob/cf735e639e5c9e3d2d84d71f1dbf789e8c2f3fd0/protocol.c#L863-L876In this case, what will happen is
diff
will be < 7, sodiff / 8
will be 0. As a result,peer -> roundTripTime -= diff / 8;
will never result in the SRTT decreasing.The effect of this bug is that the SRTT is effectively latched at 8 ms if it has ever exceeded 8 ms, even if the actual RTT has dropped back below 8 ms.
The RTT variance is also affected by a similar bug when
peer -> roundTripTimeVariance
is < 4, becausepeer -> roundTripTimeVariance / 4
will be 0.