Removed an unnecessary lock in LLUDPClient.UpdateRTO() and LLUDPClient.BackoffRTO()
							parent
							
								
									3639f68411
								
							
						
					
					
						commit
						2222172afa
					
				| 
						 | 
				
			
			@ -144,9 +144,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
        private readonly OutgoingPacket[] m_nextPackets = new OutgoingPacket[THROTTLE_CATEGORY_COUNT];
 | 
			
		||||
        /// <summary>A reference to the LLUDPServer that is managing this client</summary>
 | 
			
		||||
        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>
 | 
			
		||||
        /// 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
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        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);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue