* Added missing lock to m_forcelist when AddForce is called. When a user dragged a prim, in some cases, it would corrupt the datatype in memory and throw spurious IndexOutOfRangeExceptions.

* Physics a situation that causes physics to spew redline messages to the console forever.
0.6.8-post-fixes
Teravus Ovares (Dan Olivares) 2009-11-22 21:08:54 -05:00
parent 0ff3c28f90
commit 9ba10af6b2
1 changed files with 26 additions and 3 deletions

View File

@ -2126,9 +2126,30 @@ Console.WriteLine(" JointCreateFixed");
if (IsPhysical) if (IsPhysical)
{ {
Vector3 iforce = Vector3.Zero; Vector3 iforce = Vector3.Zero;
for (int i = 0; i < m_forcelist.Count; i++) int i = 0;
try
{ {
iforce = iforce + (m_forcelist[i] * 100); for (i = 0; i < m_forcelist.Count; i++)
{
iforce = iforce + (m_forcelist[i] * 100);
}
}
catch (IndexOutOfRangeException)
{
m_forcelist = new List<Vector3>();
m_collisionscore = 0;
m_interpenetrationcount = 0;
m_taintforce = false;
return;
}
catch (ArgumentOutOfRangeException)
{
m_forcelist = new List<Vector3>();
m_collisionscore = 0;
m_interpenetrationcount = 0;
m_taintforce = false;
return;
} }
d.BodyEnable(Body); d.BodyEnable(Body);
d.BodyAddForce(Body, iforce.X, iforce.Y, iforce.Z); d.BodyAddForce(Body, iforce.X, iforce.Y, iforce.Z);
@ -2462,7 +2483,9 @@ Console.WriteLine(" JointCreateFixed");
{ {
if (force.IsFinite()) if (force.IsFinite())
{ {
m_forcelist.Add(force); lock (m_forcelist)
m_forcelist.Add(force);
m_taintforce = true; m_taintforce = true;
} }
else else