From 06b16c5b3a5c3b9e1cc9e1ebab2de4e37c044d5c Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Tue, 23 Jun 2009 22:12:04 +0000 Subject: [PATCH] Backport the r9917 fix --- .../ClientStack/LindenUDP/LLClientView.cs | 70 +++++++++++-------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 44f8f15036..b1c750b116 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -8624,6 +8624,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP List members = m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); + int memberCount = members.Count; + while (true) { int blockCount = members.Count; @@ -8645,7 +8647,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupMembersRequestPacket.GroupData.GroupID; groupMembersReply.GroupData.RequestID = groupMembersRequestPacket.GroupData.RequestID; - groupMembersReply.GroupData.MemberCount = members.Count; + groupMembersReply.GroupData.MemberCount = memberCount; for (int i = 0 ; i < blockCount ; i++) { @@ -8756,40 +8758,50 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (m_GroupsModule != null) { - GroupRoleMembersReplyPacket groupRoleMembersReply = (GroupRoleMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleMembersReply); - groupRoleMembersReply.AgentData = - new GroupRoleMembersReplyPacket.AgentDataBlock(); - groupRoleMembersReply.AgentData.AgentID = - AgentId; - groupRoleMembersReply.AgentData.GroupID = - groupRoleMembersRequest.GroupData.GroupID; - groupRoleMembersReply.AgentData.RequestID = - groupRoleMembersRequest.GroupData.RequestID; - List mappings = - m_GroupsModule.GroupRoleMembersRequest(this, - groupRoleMembersRequest.GroupData.GroupID); + m_GroupsModule.GroupRoleMembersRequest(this, + groupRoleMembersRequest.GroupData.GroupID); - groupRoleMembersReply.AgentData.TotalPairs = - (uint)mappings.Count; + int mappingsCount = mappings.Count; - groupRoleMembersReply.MemberData = - new GroupRoleMembersReplyPacket.MemberDataBlock[mappings.Count]; - - int i = 0; - foreach (GroupRoleMembersData d in mappings) + while (mappings.Count > 0) { - groupRoleMembersReply.MemberData[i] = - new GroupRoleMembersReplyPacket.MemberDataBlock(); + int pairs = mappings.Count; + if (pairs > 32) + pairs = 32; - groupRoleMembersReply.MemberData[i].RoleID = - d.RoleID; - groupRoleMembersReply.MemberData[i].MemberID = - d.MemberID; - i++; + GroupRoleMembersReplyPacket groupRoleMembersReply = (GroupRoleMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleMembersReply); + groupRoleMembersReply.AgentData = + new GroupRoleMembersReplyPacket.AgentDataBlock(); + groupRoleMembersReply.AgentData.AgentID = + AgentId; + groupRoleMembersReply.AgentData.GroupID = + groupRoleMembersRequest.GroupData.GroupID; + groupRoleMembersReply.AgentData.RequestID = + groupRoleMembersRequest.GroupData.RequestID; + + groupRoleMembersReply.AgentData.TotalPairs = + (uint)mappingsCount; + + groupRoleMembersReply.MemberData = + new GroupRoleMembersReplyPacket.MemberDataBlock[pairs]; + + for (int i = 0 ; i < pairs ; i++) + { + GroupRoleMembersData d = mappings[0]; + mappings.RemoveAt(0); + + groupRoleMembersReply.MemberData[i] = + new GroupRoleMembersReplyPacket.MemberDataBlock(); + + groupRoleMembersReply.MemberData[i].RoleID = + d.RoleID; + groupRoleMembersReply.MemberData[i].MemberID = + d.MemberID; + } + + OutPacket(groupRoleMembersReply, ThrottleOutPacketType.Task); } - - OutPacket(groupRoleMembersReply, ThrottleOutPacketType.Task); } break;