* Fixed the Ghost physical hull on deleting a physical Prim

* Fixed a deadlock when there is an exception in the collision and stepping parts of Simulate.
ThreadPoolClientBranch
Teravus Ovares 2008-02-17 11:50:15 +00:00
parent 19e0ada93a
commit e33a0c5fc0
1 changed files with 80 additions and 66 deletions

View File

@ -755,8 +755,7 @@ namespace OpenSim.Region.Physics.OdePlugin
prim.disableBody(); prim.disableBody();
} }
// we don't want to remove the main space // we don't want to remove the main space
if (prim.m_targetSpace != space && prim.IsPhysical == false)
{
// If the geometry is in the targetspace, remove it from the target space // If the geometry is in the targetspace, remove it from the target space
//m_log.Warn(prim.m_targetSpace); //m_log.Warn(prim.m_targetSpace);
@ -788,6 +787,10 @@ namespace OpenSim.Region.Physics.OdePlugin
d.GeomDestroy(prim.prim_geom); d.GeomDestroy(prim.prim_geom);
prim.prim_geom = (IntPtr)0; prim.prim_geom = (IntPtr)0;
} }
else
{
m_log.Warn("[PHYSICS]: Unable to remove prim from physics scene");
}
} }
catch (System.AccessViolationException) catch (System.AccessViolationException)
@ -822,7 +825,7 @@ namespace OpenSim.Region.Physics.OdePlugin
ode.dunlock(world); ode.dunlock(world);
}
} }
} }
/// <summary> /// <summary>
@ -1261,6 +1264,8 @@ namespace OpenSim.Region.Physics.OdePlugin
if (!ode.lockquery()) if (!ode.lockquery())
{ {
ode.dlock(world); ode.dlock(world);
try
{
foreach (OdeCharacter actor in _characters) foreach (OdeCharacter actor in _characters)
{ {
actor.Move(timeStep); actor.Move(timeStep);
@ -1274,6 +1279,15 @@ namespace OpenSim.Region.Physics.OdePlugin
d.JointGroupEmpty(contactgroup); d.JointGroupEmpty(contactgroup);
ode.dunlock(world); ode.dunlock(world);
}
catch (Exception e)
{
m_log.Error("[PHYSICS]: " + e.Message.ToString() + e.TargetSite.ToString());
ode.dunlock(world);
}
step_time -= ODE_STEPSIZE; step_time -= ODE_STEPSIZE;
i++; i++;