* Fixing thread safety of avatar adding and removing from the Physics Scene in the ODEPlugin
* This may help one of the symptoms or mantis 3363 , however it probably won't solve the occasional NonFinite Avatar Position detected.. issues that some people see. That is probably an entirely different issue(NaN).0.6.5-rc1
parent
f88d755f96
commit
6522b4f5d4
|
@ -985,9 +985,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
|
||||
_parent_scene.geom_name_map[Shell] = m_name;
|
||||
_parent_scene.actor_name_map[Shell] = (PhysicsActor)this;
|
||||
_parent_scene.AddCharacter(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
_parent_scene.RemoveCharacter(this);
|
||||
// destroy avatar capsule and related ODE data
|
||||
|
||||
// Kill the Amotor
|
||||
|
|
|
@ -1365,6 +1365,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
// Don't need to re-enable body.. it's done in SetMesh
|
||||
_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
||||
// createmesh returns null when it's a shape that isn't a cube.
|
||||
m_log.Debug(m_localID);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1339,18 +1339,37 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
OdeCharacter newAv = new OdeCharacter(avName, this, pos, ode, size, avPIDD, avPIDP, avCapRadius, avStandupTensor, avDensity, avHeightFudgeFactor, avMovementDivisorWalk, avMovementDivisorRun);
|
||||
newAv.Flying = isFlying;
|
||||
newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset;
|
||||
_characters.Add(newAv);
|
||||
|
||||
return newAv;
|
||||
}
|
||||
|
||||
public void AddCharacter(OdeCharacter chr)
|
||||
{
|
||||
lock (_characters)
|
||||
{
|
||||
if (!_characters.Contains(chr))
|
||||
{
|
||||
_characters.Add(chr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveCharacter(OdeCharacter chr)
|
||||
{
|
||||
lock (_characters)
|
||||
{
|
||||
if (_characters.Contains(chr))
|
||||
{
|
||||
_characters.Remove(chr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void RemoveAvatar(PhysicsActor actor)
|
||||
{
|
||||
lock (OdeLock)
|
||||
{
|
||||
//m_log.Debug("[PHYSICS]:ODELOCK");
|
||||
((OdeCharacter) actor).Destroy();
|
||||
_characters.Remove((OdeCharacter) actor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private PhysicsActor AddPrim(String name, PhysicsVector position, PhysicsVector size, Quaternion rotation,
|
||||
|
|
Loading…
Reference in New Issue