Removed an unnecessary lock in LLUDPClient.UpdateRTO() and LLUDPClient.BackoffRTO()

0.6.8-post-fixes
John Hurliman 2009-10-26 11:28:02 -07:00
parent 3639f68411
commit 2222172afa
1 changed files with 23 additions and 32 deletions

View File

@ -144,9 +144,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private readonly OutgoingPacket[] m_nextPackets = new OutgoingPacket[THROTTLE_CATEGORY_COUNT]; private readonly OutgoingPacket[] m_nextPackets = new OutgoingPacket[THROTTLE_CATEGORY_COUNT];
/// <summary>A reference to the LLUDPServer that is managing this client</summary> /// <summary>A reference to the LLUDPServer that is managing this client</summary>
private readonly LLUDPServer m_udpServer; private readonly LLUDPServer m_udpServer;
/// <summary>Locks access to the variables used while calculating round-trip
/// packet times and the retransmission timeout</summary>
private readonly object m_roundTripCalcLock = new object();
/// <summary> /// <summary>
/// Default constructor /// Default constructor
@ -487,28 +484,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
const float BETA = 0.25f; const float BETA = 0.25f;
const float K = 4.0f; const float K = 4.0f;
lock (m_roundTripCalcLock) if (RTTVAR == 0.0f)
{ {
if (RTTVAR == 0.0f) // First RTT measurement
{ SRTT = r;
// First RTT measurement RTTVAR = r * 0.5f;
SRTT = r;
RTTVAR = r * 0.5f;
}
else
{
// Subsequence RTT measurement
RTTVAR = (1.0f - BETA) * RTTVAR + BETA * Math.Abs(SRTT - r);
SRTT = (1.0f - ALPHA) * SRTT + ALPHA * r;
}
int rto = (int)(SRTT + Math.Max(m_udpServer.TickCountResolution, K * RTTVAR));
// Clamp the retransmission timeout to manageable values
rto = Utils.Clamp(RTO, 3000, 60000);
RTO = rto;
} }
else
{
// Subsequence RTT measurement
RTTVAR = (1.0f - BETA) * RTTVAR + BETA * Math.Abs(SRTT - r);
SRTT = (1.0f - ALPHA) * SRTT + ALPHA * r;
}
int rto = (int)(SRTT + Math.Max(m_udpServer.TickCountResolution, K * RTTVAR));
// Clamp the retransmission timeout to manageable values
rto = Utils.Clamp(RTO, 3000, 60000);
RTO = rto;
//m_log.Debug("[LLUDPCLIENT]: Setting agent " + this.Agent.FullName + "'s RTO to " + RTO + "ms with an RTTVAR of " + //m_log.Debug("[LLUDPCLIENT]: Setting agent " + this.Agent.FullName + "'s RTO to " + RTO + "ms with an RTTVAR of " +
// RTTVAR + " based on new RTT of " + r + "ms"); // RTTVAR + " based on new RTT of " + r + "ms");
@ -520,16 +514,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// </summary> /// </summary>
public void BackoffRTO() public void BackoffRTO()
{ {
lock (m_roundTripCalcLock) // Reset SRTT and RTTVAR, we assume they are bogus since things
{ // didn't work out and we're backing off the timeout
// Reset SRTT and RTTVAR, we assume they are bogus since things SRTT = 0.0f;
// didn't work out and we're backing off the timeout RTTVAR = 0.0f;
SRTT = 0.0f;
RTTVAR = 0.0f;
// Double the retransmission timeout // Double the retransmission timeout
RTO = Math.Min(RTO * 2, 60000); RTO = Math.Min(RTO * 2, 60000);
}
} }
/// <summary> /// <summary>