* 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
0.6.0-stable
Justin Clarke Casey 2008-11-07 22:49:36 +00:00
parent ba1d9ca26b
commit 4ace67a81d
4 changed files with 30 additions and 28 deletions

View File

@ -72,14 +72,6 @@ namespace OpenSim.Region.Environment.Scenes
public InnerScene m_innerScene;
/// <summary>
/// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
/// dispenced.
/// </summary>
private uint m_lastAllocatedLocalId = 720000;
private readonly Mutex _primAllocateMutex = new Mutex(false);
private int m_timePhase = 24;
/// <summary>
@ -1618,21 +1610,6 @@ namespace OpenSim.Region.Environment.Scenes
m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
}
/// <summary>
/// Returns a new unallocated local primitive ID
/// </summary>
/// <returns>A brand new local primitive ID</returns>
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;

View File

@ -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
/// <summary>
/// The last allocated local prim id. When a new local id is requested, the next number in the sequence is
/// dispensed.
/// </summary>
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;
}
/// <summary>
/// Returns a new unallocated local ID
/// </summary>
/// <returns>A brand new local ID</returns>
protected internal uint AllocateLocalId()
{
uint myID;
_primAllocateMutex.WaitOne();
myID = ++m_lastAllocatedLocalId;
_primAllocateMutex.ReleaseMutex();
return myID;
}
public virtual T RequestModuleInterface<T>()
{

View File

@ -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
/// <param name="cGroupID"></param>
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
/// <param name="cGroupID"></param>
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);

View File

@ -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<IGroupsModule>();
if (gm != null)