aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
diff options
context:
space:
mode:
authorDan Lake2011-04-20 23:08:51 -0700
committerDan Lake2011-04-20 23:08:51 -0700
commitb5ab33b5e190e79789df3f44b24959fd229a8c6d (patch)
treeb8daedb3660c39382f9dfc816087e79da2b4f39e /OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
parentAdded an "immediate" queue to the priority queue. This is (diff)
downloadopensim-SC_OLD-b5ab33b5e190e79789df3f44b24959fd229a8c6d.zip
opensim-SC_OLD-b5ab33b5e190e79789df3f44b24959fd229a8c6d.tar.gz
opensim-SC_OLD-b5ab33b5e190e79789df3f44b24959fd229a8c6d.tar.bz2
opensim-SC_OLD-b5ab33b5e190e79789df3f44b24959fd229a8c6d.tar.xz
bug fix. Now when an unacked update packet is handled through ResendPrimUpdates, it is removed from the UnackedPacketCollection.
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs34
1 files changed, 21 insertions, 13 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 1108863..1e8bbb8 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -3583,10 +3583,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3583 /// with any other updates that may be queued for the same entity. 3583 /// with any other updates that may be queued for the same entity.
3584 /// The original update time is used for the merged update. 3584 /// The original update time is used for the merged update.
3585 /// </summary> 3585 /// </summary>
3586 private void ResendPrimUpdates(List<EntityUpdate> updates) 3586 private void ResendPrimUpdates(List<EntityUpdate> updates, OutgoingPacket oPacket)
3587 { 3587 {
3588 // m_log.WarnFormat("[CLIENT] resending prim update {0}",updates[0].UpdateTime); 3588 // m_log.WarnFormat("[CLIENT] resending prim update {0}",updates[0].UpdateTime);
3589 3589
3590 // Remove the update packet from the list of packets waiting for acknowledgement
3591 // because we are requeuing the list of updates. They will be resent in new packets
3592 // with the most recent state and priority.
3593 m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber, 0, true);
3590 foreach (EntityUpdate update in updates) 3594 foreach (EntityUpdate update in updates)
3591 ResendPrimUpdate(update); 3595 ResendPrimUpdate(update);
3592 } 3596 }
@@ -3771,7 +3775,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3771 for (int i = 0; i < blocks.Count; i++) 3775 for (int i = 0; i < blocks.Count; i++)
3772 packet.ObjectData[i] = blocks[i]; 3776 packet.ObjectData[i] = blocks[i];
3773 // If any of the packets created from this call go unacknowledged, all of the updates will be resent 3777 // If any of the packets created from this call go unacknowledged, all of the updates will be resent
3774 OutPacket(packet, ThrottleOutPacketType.Unknown, true, delegate() { ResendPrimUpdates(terseAgentUpdates.Value); }); 3778 OutPacket(packet, ThrottleOutPacketType.Unknown, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(terseAgentUpdates.Value, oPacket); });
3775 } 3779 }
3776 3780
3777 if (objectUpdateBlocks.IsValueCreated) 3781 if (objectUpdateBlocks.IsValueCreated)
@@ -3786,7 +3790,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3786 for (int i = 0; i < blocks.Count; i++) 3790 for (int i = 0; i < blocks.Count; i++)
3787 packet.ObjectData[i] = blocks[i]; 3791 packet.ObjectData[i] = blocks[i];
3788 // If any of the packets created from this call go unacknowledged, all of the updates will be resent 3792 // If any of the packets created from this call go unacknowledged, all of the updates will be resent
3789 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate() { ResendPrimUpdates(objectUpdates.Value); }); 3793 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(objectUpdates.Value, oPacket); });
3790 } 3794 }
3791 3795
3792 if (compressedUpdateBlocks.IsValueCreated) 3796 if (compressedUpdateBlocks.IsValueCreated)
@@ -3801,7 +3805,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3801 for (int i = 0; i < blocks.Count; i++) 3805 for (int i = 0; i < blocks.Count; i++)
3802 packet.ObjectData[i] = blocks[i]; 3806 packet.ObjectData[i] = blocks[i];
3803 // If any of the packets created from this call go unacknowledged, all of the updates will be resent 3807 // If any of the packets created from this call go unacknowledged, all of the updates will be resent
3804 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate() { ResendPrimUpdates(compressedUpdates.Value); }); 3808 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(compressedUpdates.Value, oPacket); });
3805 } 3809 }
3806 3810
3807 if (terseUpdateBlocks.IsValueCreated) 3811 if (terseUpdateBlocks.IsValueCreated)
@@ -3816,7 +3820,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3816 for (int i = 0; i < blocks.Count; i++) 3820 for (int i = 0; i < blocks.Count; i++)
3817 packet.ObjectData[i] = blocks[i]; 3821 packet.ObjectData[i] = blocks[i];
3818 // If any of the packets created from this call go unacknowledged, all of the updates will be resent 3822 // If any of the packets created from this call go unacknowledged, all of the updates will be resent
3819 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate() { ResendPrimUpdates(terseUpdates.Value); }); 3823 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(terseUpdates.Value, oPacket); });
3820 } 3824 }
3821 } 3825 }
3822 3826
@@ -4027,10 +4031,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4027 m_entityProps.Enqueue(priority, update); 4031 m_entityProps.Enqueue(priority, update);
4028 } 4032 }
4029 4033
4030 private void ResendPropertyUpdates(List<ObjectPropertyUpdate> updates) 4034 private void ResendPropertyUpdates(List<ObjectPropertyUpdate> updates, OutgoingPacket oPacket)
4031 { 4035 {
4032 // m_log.WarnFormat("[CLIENT] resending object property {0}",updates[0].UpdateTime); 4036 // m_log.WarnFormat("[CLIENT] resending object property {0}",updates[0].UpdateTime);
4033 4037
4038 // Remove the update packet from the list of packets waiting for acknowledgement
4039 // because we are requeuing the list of updates. They will be resent in new packets
4040 // with the most recent state.
4041 m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber, 0, true);
4034 foreach (ObjectPropertyUpdate update in updates) 4042 foreach (ObjectPropertyUpdate update in updates)
4035 ResendPropertyUpdate(update); 4043 ResendPropertyUpdate(update);
4036 } 4044 }
@@ -4111,9 +4119,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4111 // Pass in the delegate so that if this packet needs to be resent, we send the current properties 4119 // Pass in the delegate so that if this packet needs to be resent, we send the current properties
4112 // of the object rather than the properties when the packet was created 4120 // of the object rather than the properties when the packet was created
4113 OutPacket(packet, ThrottleOutPacketType.Task, true, 4121 OutPacket(packet, ThrottleOutPacketType.Task, true,
4114 delegate() 4122 delegate(OutgoingPacket oPacket)
4115 { 4123 {
4116 ResendPropertyUpdates(updates); 4124 ResendPropertyUpdates(updates, oPacket);
4117 }); 4125 });
4118 4126
4119 // pbcnt += blocks.Count; 4127 // pbcnt += blocks.Count;
@@ -4126,7 +4134,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4126 if (objectFamilyBlocks.IsValueCreated) 4134 if (objectFamilyBlocks.IsValueCreated)
4127 { 4135 {
4128 List<ObjectPropertiesFamilyPacket.ObjectDataBlock> blocks = objectFamilyBlocks.Value; 4136 List<ObjectPropertiesFamilyPacket.ObjectDataBlock> blocks = objectFamilyBlocks.Value;
4129 List<ObjectPropertyUpdate> updates = familyUpdates.Value;
4130 4137
4131 // one packet per object block... uggh... 4138 // one packet per object block... uggh...
4132 for (int i = 0; i < blocks.Count; i++) 4139 for (int i = 0; i < blocks.Count; i++)
@@ -4139,11 +4146,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4139 4146
4140 // Pass in the delegate so that if this packet needs to be resent, we send the current properties 4147 // Pass in the delegate so that if this packet needs to be resent, we send the current properties
4141 // of the object rather than the properties when the packet was created 4148 // of the object rather than the properties when the packet was created
4142 ObjectPropertyUpdate update = updates[i]; 4149 List<ObjectPropertyUpdate> updates = new List<ObjectPropertyUpdate>();
4150 updates.Add(familyUpdates.Value[i]);
4143 OutPacket(packet, ThrottleOutPacketType.Task, true, 4151 OutPacket(packet, ThrottleOutPacketType.Task, true,
4144 delegate() 4152 delegate(OutgoingPacket oPacket)
4145 { 4153 {
4146 ResendPropertyUpdate(update); 4154 ResendPropertyUpdates(updates, oPacket);
4147 }); 4155 });
4148 4156
4149 // fpcnt++; 4157 // fpcnt++;