diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index b0e689cb7c..c42446c8c7 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -6926,8 +6926,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP return true; } - uint m_DeRezObjectLasSeq = 0; - Dictionary> m_DeRezObjectDelayed = new Dictionary>(); + private class DeRezObjectInfo + { + public int count; + public List objectids; + } + private Dictionary m_DeRezObjectDelayed = new Dictionary(); private bool HandlerDeRezObject(IClientAPI sender, Packet Pack) { @@ -6943,23 +6947,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP return true; #endregion - uint seq = DeRezPacket.Header.Sequence; - if(seq <= m_DeRezObjectLasSeq) - return true; - m_DeRezObjectLasSeq = seq; - List deRezIDs; DeRezAction action = (DeRezAction)DeRezPacket.AgentBlock.Destination; int numberPackets = DeRezPacket.AgentBlock.PacketCount; int curPacket = DeRezPacket.AgentBlock.PacketNumber; UUID id = DeRezPacket.AgentBlock.TransactionID; - if (numberPackets > 1) + if (numberPackets > 1) { - if(!m_DeRezObjectDelayed.TryGetValue(id, out deRezIDs)) + DeRezObjectInfo info; + if (!m_DeRezObjectDelayed.TryGetValue(id, out info)) { deRezIDs = new List(); - m_DeRezObjectDelayed[id] = deRezIDs; + info = new DeRezObjectInfo(); + info.count = 0; + info.objectids = deRezIDs; + m_DeRezObjectDelayed[id] = info; + } + else + { + deRezIDs = info.objectids; } foreach (DeRezObjectPacket.ObjectDataBlock data in DeRezPacket.ObjectData) @@ -6967,10 +6974,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP deRezIDs.Add(data.ObjectLocalID); } - if (curPacket < numberPackets - 1) + info.count++; + if (info.count < numberPackets) return true; m_DeRezObjectDelayed.Remove(id); + info.objectids = null; } else {