diff options
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs index 9d40688..d195110 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs | |||
@@ -143,7 +143,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
143 | // Process all the pending adds | 143 | // Process all the pending adds |
144 | OutgoingPacket pendingAdd; | 144 | OutgoingPacket pendingAdd; |
145 | while (m_pendingAdds.TryDequeue(out pendingAdd)) | 145 | while (m_pendingAdds.TryDequeue(out pendingAdd)) |
146 | m_packets[pendingAdd.SequenceNumber] = pendingAdd; | 146 | if (pendingAdd != null) |
147 | m_packets[pendingAdd.SequenceNumber] = pendingAdd; | ||
147 | 148 | ||
148 | // Process all the pending removes, including updating statistics and round-trip times | 149 | // Process all the pending removes, including updating statistics and round-trip times |
149 | PendingAck pendingRemove; | 150 | PendingAck pendingRemove; |
@@ -152,17 +153,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
152 | { | 153 | { |
153 | if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket)) | 154 | if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket)) |
154 | { | 155 | { |
155 | m_packets.Remove(pendingRemove.SequenceNumber); | 156 | if (ackedPacket != null) |
156 | |||
157 | // Update stats | ||
158 | Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength); | ||
159 | |||
160 | if (!pendingRemove.FromResend) | ||
161 | { | 157 | { |
162 | // Calculate the round-trip time for this packet and its ACK | 158 | m_packets.Remove(pendingRemove.SequenceNumber); |
163 | int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount; | 159 | |
164 | if (rtt > 0) | 160 | // Update stats |
165 | ackedPacket.Client.UpdateRoundTrip(rtt); | 161 | Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength); |
162 | |||
163 | if (!pendingRemove.FromResend) | ||
164 | { | ||
165 | // Calculate the round-trip time for this packet and its ACK | ||
166 | int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount; | ||
167 | if (rtt > 0) | ||
168 | ackedPacket.Client.UpdateRoundTrip(rtt); | ||
169 | } | ||
166 | } | 170 | } |
167 | } | 171 | } |
168 | } | 172 | } |