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