* Fixed the Link + Duplicate + Unlink both = 'ODE Invalid Argument in Collision Space Crash'

* Added: Console comment: [PHYSICS]: The scene reused a disposed PhysActor! *waves finger*, Don't be evil.
0.6.0-stable
Teravus Ovares 2008-03-09 16:32:44 +00:00
parent 081b2ac34e
commit 5b6eba968b
2 changed files with 39 additions and 27 deletions

View File

@ -696,45 +696,51 @@ namespace OpenSim.Region.Physics.OdePlugin
public void ProcessTaints(float timestep) public void ProcessTaints(float timestep)
{ {
if (m_taintadd) if (m_taintadd)
{ {
changeadd(timestep); changeadd(timestep);
} }
if (prim_geom != (IntPtr)0)
{
if (m_taintposition != _position)
Move(timestep);
if (m_taintposition != _position) if (m_taintrot != _orientation)
Move(timestep); rotate(timestep);
//
if (m_taintrot != _orientation) if (m_taintPhysics != m_isphysical)
rotate(timestep); changePhysicsStatus(timestep);
// //
if (m_taintPhysics != m_isphysical) if (m_taintsize != _size)
changePhysicsStatus(timestep); changesize(timestep);
// //
if (m_taintsize != _size) if (m_taintshape)
changesize(timestep); changeshape(timestep);
// //
if (m_taintshape) if (m_taintforce)
changeshape(timestep); changeAddForce(timestep);
//
if (m_taintforce) if (m_taintdisable)
changeAddForce(timestep); changedisable(timestep);
if (m_taintdisable) if (m_taintselected != m_isSelected)
changedisable(timestep); changeSelectedStatus(timestep);
if (m_taintselected != m_isSelected) if (m_taintVelocity != PhysicsVector.Zero)
changeSelectedStatus(timestep); changevelocity(timestep);
if (m_taintVelocity != PhysicsVector.Zero) if (m_taintparent != _parent)
changevelocity(timestep); changelink(timestep);
}
if (m_taintparent != _parent) else
changelink(timestep); {
m_log.Error("[PHYISCS]: The scene reused a disposed PhysActor! *waves finger*, Don't be evil.");
}
} }
private void changelink(float timestep) private void changelink(float timestep)

View File

@ -238,7 +238,8 @@ namespace OpenSim.Region.Physics.OdePlugin
internal void waitForSpaceUnlock(IntPtr space) internal void waitForSpaceUnlock(IntPtr space)
{ {
while (d.SpaceLockQuery(space)){ } // Wait and do nothing if (space != (IntPtr)0)
while (d.SpaceLockQuery(space)){ } // Wait and do nothing
} }
/// <summary> /// <summary>
@ -1014,6 +1015,11 @@ namespace OpenSim.Region.Physics.OdePlugin
System.Threading.Thread.Sleep(20); System.Threading.Thread.Sleep(20);
if (currentspace != space) if (currentspace != space)
{ {
m_log.Info("[SPACE]: C:" + currentspace.ToString() + " g:" + geom.ToString());
if (currentspace == (IntPtr) 0)
{
int adfadf = 0;
}
if (d.SpaceQuery(currentspace, geom) && currentspace != (IntPtr) 0) if (d.SpaceQuery(currentspace, geom) && currentspace != (IntPtr) 0)
{ {
if (d.GeomIsSpace(currentspace)) if (d.GeomIsSpace(currentspace))