From 2222172afaa97a8550c08c32cab3474d37fcf984 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Mon, 26 Oct 2009 11:28:02 -0700 Subject: [PATCH] Removed an unnecessary lock in LLUDPClient.UpdateRTO() and LLUDPClient.BackoffRTO() --- .../ClientStack/LindenUDP/LLUDPClient.cs | 55 ++++++++----------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs index 0948e1cf17..a823f3ba1f 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs @@ -144,9 +144,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP private readonly OutgoingPacket[] m_nextPackets = new OutgoingPacket[THROTTLE_CATEGORY_COUNT]; /// A reference to the LLUDPServer that is managing this client private readonly LLUDPServer m_udpServer; - /// Locks access to the variables used while calculating round-trip - /// packet times and the retransmission timeout - private readonly object m_roundTripCalcLock = new object(); /// /// Default constructor @@ -487,28 +484,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP const float BETA = 0.25f; const float K = 4.0f; - lock (m_roundTripCalcLock) + if (RTTVAR == 0.0f) { - if (RTTVAR == 0.0f) - { - // First RTT measurement - 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; + // First RTT measurement + 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; //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"); @@ -520,16 +514,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// 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 - SRTT = 0.0f; - RTTVAR = 0.0f; + // Reset SRTT and RTTVAR, we assume they are bogus since things + // didn't work out and we're backing off the timeout + SRTT = 0.0f; + RTTVAR = 0.0f; - // Double the retransmission timeout - RTO = Math.Min(RTO * 2, 60000); - } + // Double the retransmission timeout + RTO = Math.Min(RTO * 2, 60000); } ///