aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/LindenUDP
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs7
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs8
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs47
3 files changed, 24 insertions, 38 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index e416d05..eb5c0f5 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -3493,9 +3493,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3493 ani.AnimationList[i].AnimSequenceID = seqs[i]; 3493 ani.AnimationList[i].AnimSequenceID = seqs[i];
3494 3494
3495 ani.AnimationSourceList[i] = new AvatarAnimationPacket.AnimationSourceListBlock(); 3495 ani.AnimationSourceList[i] = new AvatarAnimationPacket.AnimationSourceListBlock();
3496 ani.AnimationSourceList[i].ObjectID = objectIDs[i]; 3496 if (objectIDs[i].Equals(sourceAgentId))
3497 if (objectIDs[i] == UUID.Zero) 3497 ani.AnimationSourceList[i].ObjectID = UUID.Zero;
3498 ani.AnimationSourceList[i].ObjectID = sourceAgentId; 3498 else
3499 ani.AnimationSourceList[i].ObjectID = objectIDs[i];
3499 } 3500 }
3500 ani.Header.Reliable = false; 3501 ani.Header.Reliable = false;
3501 OutPacket(ani, ThrottleOutPacketType.Task); 3502 OutPacket(ani, ThrottleOutPacketType.Task);
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 6985449..f969bc3 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -585,8 +585,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
585 585
586 // Stats tracking 586 // Stats tracking
587 Interlocked.Increment(ref udpClient.PacketsSent); 587 Interlocked.Increment(ref udpClient.PacketsSent);
588 if (isReliable)
589 Interlocked.Add(ref udpClient.UnackedBytes, outgoingPacket.Buffer.DataLength);
590 588
591 // Put the UDP payload on the wire 589 // Put the UDP payload on the wire
592 AsyncBeginSend(buffer); 590 AsyncBeginSend(buffer);
@@ -859,9 +857,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
859 // Acknowledge the UseCircuitCode packet 857 // Acknowledge the UseCircuitCode packet
860 SendAckImmediate(remoteEndPoint, packet.Header.Sequence); 858 SendAckImmediate(remoteEndPoint, packet.Header.Sequence);
861 859
862 m_log.DebugFormat( 860// m_log.DebugFormat(
863 "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms", 861// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
864 buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds); 862// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
865 } 863 }
866 864
867 private void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber) 865 private void SendAckImmediate(IPEndPoint remoteEndpoint, uint sequenceNumber)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
index 4cb4aee..9d40688 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/UnackedPacketCollection.cs
@@ -28,6 +28,7 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Net; 30using System.Net;
31using System.Threading;
31using OpenMetaverse; 32using OpenMetaverse;
32 33
33namespace OpenSim.Region.ClientStack.LindenUDP 34namespace OpenSim.Region.ClientStack.LindenUDP
@@ -77,6 +78,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
77 public void Add(OutgoingPacket packet) 78 public void Add(OutgoingPacket packet)
78 { 79 {
79 m_pendingAdds.Enqueue(packet); 80 m_pendingAdds.Enqueue(packet);
81 Interlocked.Add(ref packet.Client.UnackedBytes, packet.Buffer.DataLength);
80 } 82 }
81 83
82 /// <summary> 84 /// <summary>
@@ -139,46 +141,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP
139 private void ProcessQueues() 141 private void ProcessQueues()
140 { 142 {
141 // Process all the pending adds 143 // Process all the pending adds
142
143 OutgoingPacket pendingAdd; 144 OutgoingPacket pendingAdd;
144 if (m_pendingAdds != null) 145 while (m_pendingAdds.TryDequeue(out pendingAdd))
145 { 146 m_packets[pendingAdd.SequenceNumber] = pendingAdd;
146 while (m_pendingAdds.TryDequeue(out pendingAdd))
147 {
148 if (pendingAdd != null && m_packets != null)
149 {
150 m_packets[pendingAdd.SequenceNumber] = pendingAdd;
151 }
152 }
153 }
154 147
155 // Process all the pending removes, including updating statistics and round-trip times 148 // Process all the pending removes, including updating statistics and round-trip times
156 PendingAck pendingRemove; 149 PendingAck pendingRemove;
157 OutgoingPacket ackedPacket; 150 OutgoingPacket ackedPacket;
158 if (m_pendingRemoves != null) 151 while (m_pendingRemoves.TryDequeue(out pendingRemove))
159 { 152 {
160 while (m_pendingRemoves.TryDequeue(out pendingRemove)) 153 if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket))
161 { 154 {
162 if (m_pendingRemoves != null && m_packets != null) 155 m_packets.Remove(pendingRemove.SequenceNumber);
156
157 // Update stats
158 Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength);
159
160 if (!pendingRemove.FromResend)
163 { 161 {
164 if (m_packets.TryGetValue(pendingRemove.SequenceNumber, out ackedPacket)) 162 // Calculate the round-trip time for this packet and its ACK
165 { 163 int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount;
166 m_packets.Remove(pendingRemove.SequenceNumber); 164 if (rtt > 0)
167 165 ackedPacket.Client.UpdateRoundTrip(rtt);
168 // Update stats
169 System.Threading.Interlocked.Add(ref ackedPacket.Client.UnackedBytes, -ackedPacket.Buffer.DataLength);
170
171 if (!pendingRemove.FromResend)
172 {
173 // Calculate the round-trip time for this packet and its ACK
174 int rtt = pendingRemove.RemoveTime - ackedPacket.TickCount;
175 if (rtt > 0)
176 ackedPacket.Client.UpdateRoundTrip(rtt);
177 }
178 }
179 } 166 }
180 } 167 }
181 } 168 }
182 } 169 }
183 } 170 }
184} 171} \ No newline at end of file