From 4ace67a81d90ef6d6385c70f86cff2115522372b Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Fri, 7 Nov 2008 22:49:36 +0000
Subject: * Fix bug in r7162 where avatars could not move * Was caused by the
lack of a local id. Local ids are now given from the same sequence as prims,
rather than a separate one * I don't believe this will cause any problems,
but please revert to a separate sequence if it does
---
OpenSim/Region/Environment/Scenes/Scene.cs | 23 ---------------------
OpenSim/Region/Environment/Scenes/SceneBase.cs | 24 ++++++++++++++++++++++
.../Region/Environment/Scenes/SceneObjectGroup.cs | 10 ++++-----
OpenSim/Region/Environment/Scenes/ScenePresence.cs | 1 +
4 files changed, 30 insertions(+), 28 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 833b765..4b8df37 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -72,14 +72,6 @@ namespace OpenSim.Region.Environment.Scenes
public InnerScene m_innerScene;
- ///
- /// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
- /// dispenced.
- ///
- private uint m_lastAllocatedLocalId = 720000;
-
- private readonly Mutex _primAllocateMutex = new Mutex(false);
-
private int m_timePhase = 24;
///
@@ -1618,21 +1610,6 @@ namespace OpenSim.Region.Environment.Scenes
m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
}
- ///
- /// Returns a new unallocated local primitive ID
- ///
- /// A brand new local primitive ID
- protected internal uint AllocateLocalPrimId()
- {
- uint myID;
-
- _primAllocateMutex.WaitOne();
- myID = ++m_lastAllocatedLocalId;
- _primAllocateMutex.ReleaseMutex();
-
- return myID;
- }
-
public Vector3 GetNewRezLocation(Vector3 RayStart, Vector3 RayEnd, UUID RayTargetID, Quaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, Vector3 scale, bool FaceCenter)
{
Vector3 pos = Vector3.Zero;
diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs
index bf0e211..bba31f7 100644
--- a/OpenSim/Region/Environment/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using System.Threading;
using OpenMetaverse;
using log4net;
using OpenSim.Framework;
@@ -48,6 +49,14 @@ namespace OpenSim.Region.Environment.Scenes
#region Fields
+ ///
+ /// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
+ /// dispensed.
+ ///
+ private uint m_lastAllocatedLocalId = 720000;
+
+ private readonly Mutex _primAllocateMutex = new Mutex(false);
+
private readonly ClientManager m_clientManager = new ClientManager();
public ClientManager ClientManager
@@ -212,6 +221,21 @@ namespace OpenSim.Region.Environment.Scenes
return null;
}
+
+ ///
+ /// Returns a new unallocated local ID
+ ///
+ /// A brand new local ID
+ protected internal uint AllocateLocalId()
+ {
+ uint myID;
+
+ _primAllocateMutex.WaitOne();
+ myID = ++m_lastAllocatedLocalId;
+ _primAllocateMutex.ReleaseMutex();
+
+ return myID;
+ }
public virtual T RequestModuleInterface()
{
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index bb80fd0..949ac3d 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -567,7 +567,7 @@ namespace OpenSim.Region.Environment.Scenes
RegionHandle = m_scene.RegionInfo.RegionHandle;
m_rootPart.ParentID = 0;
- m_rootPart.LocalId = m_scene.AllocateLocalPrimId();
+ m_rootPart.LocalId = m_scene.AllocateLocalId();
// No need to lock here since the object isn't yet in a scene
foreach (SceneObjectPart part in m_parts.Values)
@@ -575,7 +575,7 @@ namespace OpenSim.Region.Environment.Scenes
if (Object.ReferenceEquals(part, m_rootPart))
continue;
- part.LocalId = m_scene.AllocateLocalPrimId();
+ part.LocalId = m_scene.AllocateLocalId();
part.ParentID = m_rootPart.LocalId;
//m_log.DebugFormat("[SCENE]: Given local id {0} to part {1}, linknum {2}, parent {3} {4}", part.LocalId, part.UUID, part.LinkNum, part.ParentID, part.ParentUUID);
}
@@ -1394,7 +1394,7 @@ namespace OpenSim.Region.Environment.Scenes
///
public void CopyRootPart(SceneObjectPart part, UUID cAgentID, UUID cGroupID, bool userExposed)
{
- SceneObjectPart newPart = part.Copy(m_scene.AllocateLocalPrimId(), OwnerID, GroupID, m_parts.Count, userExposed);
+ SceneObjectPart newPart = part.Copy(m_scene.AllocateLocalId(), OwnerID, GroupID, m_parts.Count, userExposed);
newPart.SetParent(this);
lock (m_parts)
@@ -1514,7 +1514,7 @@ namespace OpenSim.Region.Environment.Scenes
///
public void CopyPart(SceneObjectPart part, UUID cAgentID, UUID cGroupID, bool userExposed)
{
- SceneObjectPart newPart = part.Copy(m_scene.AllocateLocalPrimId(), OwnerID, GroupID, m_parts.Count, userExposed);
+ SceneObjectPart newPart = part.Copy(m_scene.AllocateLocalId(), OwnerID, GroupID, m_parts.Count, userExposed);
newPart.SetParent(this);
lock (m_parts)
@@ -2676,7 +2676,7 @@ namespace OpenSim.Region.Environment.Scenes
scriptPosTarget waypoint = new scriptPosTarget();
waypoint.targetPos = target;
waypoint.tolerance = tolerance;
- uint handle = m_scene.AllocateLocalPrimId();
+ uint handle = m_scene.AllocateLocalId();
lock (m_targets)
{
m_targets.Add(handle, waypoint);
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 65565a5..5958a41 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -492,6 +492,7 @@ namespace OpenSim.Region.Environment.Scenes
m_scene = world;
m_uuid = client.AgentId;
m_regionInfo = reginfo;
+ m_localId = m_scene.AllocateLocalId();
IGroupsModule gm = m_scene.RequestModuleInterface();
if (gm != null)
--
cgit v1.1