mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 08:55:56 +08:00
Experimental change to use an immutable array for iterating ScenePresences, avoiding locking and copying the list each time it is accessed
This commit is contained in:
@@ -7227,13 +7227,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
public LSL_Integer llGetNumberOfPrims()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
List<ScenePresence> presences = World.GetScenePresences();
|
||||
if (presences.Count == 0)
|
||||
ScenePresence[] presences = World.GetScenePresences();
|
||||
if (presences.Length == 0)
|
||||
return 0;
|
||||
|
||||
int avatarCount = 0;
|
||||
foreach (ScenePresence presence in presences)
|
||||
for (int i = 0; i < presences.Length; i++)
|
||||
{
|
||||
ScenePresence presence = presences[i];
|
||||
|
||||
if (!presence.IsChildAgent && presence.ParentID != 0)
|
||||
{
|
||||
if (m_host.ParentGroup.HasChildPrim(presence.ParentID))
|
||||
|
||||
@@ -404,7 +404,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||
|
||||
private List<SensedEntity> doAgentSensor(SenseRepeatClass ts)
|
||||
{
|
||||
List<ScenePresence> Presences;
|
||||
List<ScenePresence> presences;
|
||||
List<SensedEntity> sensedEntities = new List<SensedEntity>();
|
||||
|
||||
// If this is an avatar sense by key try to get them directly
|
||||
@@ -414,16 +414,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||
ScenePresence p = m_CmdManager.m_ScriptEngine.World.GetScenePresence(ts.keyID);
|
||||
if (p == null)
|
||||
return sensedEntities;
|
||||
Presences = new List<ScenePresence>();
|
||||
Presences.Add(p);
|
||||
presences = new List<ScenePresence>();
|
||||
presences.Add(p);
|
||||
}
|
||||
else
|
||||
{
|
||||
Presences = m_CmdManager.m_ScriptEngine.World.GetScenePresences();
|
||||
presences = new List<ScenePresence>(m_CmdManager.m_ScriptEngine.World.GetScenePresences());
|
||||
}
|
||||
|
||||
// If nobody about quit fast
|
||||
if (Presences.Count == 0)
|
||||
if (presences.Count == 0)
|
||||
return sensedEntities;
|
||||
|
||||
SceneObjectPart SensePoint = ts.host;
|
||||
@@ -440,8 +440,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||
Vector3 toRegionPos;
|
||||
double dis;
|
||||
|
||||
foreach (ScenePresence presence in Presences)
|
||||
for (int i = 0; i < presences.Count; i++)
|
||||
{
|
||||
ScenePresence presence = presences[i];
|
||||
bool keep = true;
|
||||
|
||||
if (presence.IsDeleted)
|
||||
|
||||
Reference in New Issue
Block a user