aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs49
1 files changed, 29 insertions, 20 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
index e1d694e..f7e4c1c 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
@@ -1540,8 +1540,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1540 { 1540 {
1541 if (CollisionEventsThisFrame != null) 1541 if (CollisionEventsThisFrame != null)
1542 { 1542 {
1543 CollisionEventsThisFrame.Clear(); 1543 lock (CollisionEventsThisFrame)
1544 CollisionEventsThisFrame = null; 1544 {
1545 CollisionEventsThisFrame.Clear();
1546 CollisionEventsThisFrame = null;
1547 }
1545 } 1548 }
1546 m_eventsubscription = 0; 1549 m_eventsubscription = 0;
1547 } 1550 }
@@ -1550,8 +1553,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1550 { 1553 {
1551 if (CollisionEventsThisFrame == null) 1554 if (CollisionEventsThisFrame == null)
1552 CollisionEventsThisFrame = new CollisionEventUpdate(); 1555 CollisionEventsThisFrame = new CollisionEventUpdate();
1553 CollisionEventsThisFrame.AddCollider(CollidedWith, contact); 1556 lock (CollisionEventsThisFrame)
1554 _parent_scene.AddCollisionEventReporting(this); 1557 {
1558 CollisionEventsThisFrame.AddCollider(CollidedWith, contact);
1559 _parent_scene.AddCollisionEventReporting(this);
1560 }
1555 } 1561 }
1556 1562
1557 public void SendCollisions() 1563 public void SendCollisions()
@@ -1559,26 +1565,29 @@ namespace OpenSim.Region.Physics.OdePlugin
1559 if (CollisionEventsThisFrame == null) 1565 if (CollisionEventsThisFrame == null)
1560 return; 1566 return;
1561 1567
1562 if (m_cureventsubscription < m_eventsubscription) 1568 lock (CollisionEventsThisFrame)
1563 return; 1569 {
1570 if (m_cureventsubscription < m_eventsubscription)
1571 return;
1564 1572
1565 m_cureventsubscription = 0; 1573 m_cureventsubscription = 0;
1566 1574
1567 int ncolisions = CollisionEventsThisFrame.m_objCollisionList.Count; 1575 int ncolisions = CollisionEventsThisFrame.m_objCollisionList.Count;
1568 1576
1569 if (!SentEmptyCollisionsEvent || ncolisions > 0) 1577 if (!SentEmptyCollisionsEvent || ncolisions > 0)
1570 {
1571 base.SendCollisionUpdate(CollisionEventsThisFrame);
1572
1573 if (ncolisions == 0)
1574 { 1578 {
1575 SentEmptyCollisionsEvent = true; 1579 base.SendCollisionUpdate(CollisionEventsThisFrame);
1576 _parent_scene.RemoveCollisionEventReporting(this); 1580
1577 } 1581 if (ncolisions == 0)
1578 else 1582 {
1579 { 1583 SentEmptyCollisionsEvent = true;
1580 SentEmptyCollisionsEvent = false; 1584 _parent_scene.RemoveCollisionEventReporting(this);
1581 CollisionEventsThisFrame.Clear(); 1585 }
1586 else
1587 {
1588 SentEmptyCollisionsEvent = false;
1589 CollisionEventsThisFrame.Clear();
1590 }
1582 } 1591 }
1583 } 1592 }
1584 } 1593 }