* 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
parent
0ff3c28f90
commit
9ba10af6b2
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue