Add locks on m_killRecord without breaking things like justin did

avinationmerge
Melanie 2010-12-16 20:49:40 +01:00
parent aebc011f7b
commit 835e4dbc2c
1 changed files with 21 additions and 15 deletions

View File

@ -1529,21 +1529,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP
kill.Header.Reliable = true; kill.Header.Reliable = true;
kill.Header.Zerocoded = true; kill.Header.Zerocoded = true;
if (localIDs.Count == 1) lock (m_killRecord)
{ {
if (m_scene.GetScenePresence(localIDs[0]) != null) if (localIDs.Count == 1)
{ {
OutPacket(kill, ThrottleOutPacketType.State); if (m_scene.GetScenePresence(localIDs[0]) != null)
return; {
OutPacket(kill, ThrottleOutPacketType.State);
return;
}
m_killRecord.Add(localIDs[0]);
} }
m_killRecord.Add(localIDs[0]); else
}
else
{
lock (m_entityUpdates.SyncRoot)
{ {
foreach (uint localID in localIDs) lock (m_entityUpdates.SyncRoot)
m_killRecord.Add(localID); {
foreach (uint localID in localIDs)
m_killRecord.Add(localID);
}
} }
} }
@ -3615,10 +3618,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// //
// This doesn't appear to apply to child prims - a client will happily ignore these updates // This doesn't appear to apply to child prims - a client will happily ignore these updates
// after the root prim has been deleted. // after the root prim has been deleted.
if (m_killRecord.Contains(part.LocalId)) lock (m_killRecord)
continue; {
if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId)) if (m_killRecord.Contains(part.LocalId))
continue; continue;
if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId))
continue;
}
if (part.ParentGroup.IsDeleted) if (part.ParentGroup.IsDeleted)
continue; continue;