diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs index 6267051aac..f6426998d3 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs @@ -1221,8 +1221,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde /// public void RemoveCollisionEventReporting(PhysicsActor obj) { - if (_collisionEventPrim.Contains(obj) && !_collisionEventPrimRemove.Contains(obj)) - _collisionEventPrimRemove.Add(obj); + lock(_collisionEventPrimRemove) + { + if (_collisionEventPrim.Contains(obj) && !_collisionEventPrimRemove.Contains(obj)) + _collisionEventPrimRemove.Add(obj); + } } public override float TimeDilation @@ -1759,10 +1762,13 @@ namespace OpenSim.Region.PhysicsModule.ubOde prm.SleeperAddCollisionEvents(); sleepers.Clear(); - foreach (PhysicsActor obj in _collisionEventPrimRemove) - _collisionEventPrim.Remove(obj); + lock(_collisionEventPrimRemove) + { + foreach (PhysicsActor obj in _collisionEventPrimRemove) + _collisionEventPrim.Remove(obj); - _collisionEventPrimRemove.Clear(); + _collisionEventPrimRemove.Clear(); + } // do a ode simulation step d.WorldQuickStep(world, ODE_STEPSIZE);