From 5b2e37764a9216ad9ef57776747fbc7599559dc7 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 9 Mar 2006 00:14:14 +0000 Subject: [PATCH] fix crash when PhysicsManager destructs first --- panda/src/physics/physicsManager.I | 4 ++-- panda/src/physics/physicsManager.cxx | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/panda/src/physics/physicsManager.I b/panda/src/physics/physicsManager.I index b5ec091216..9b22f643e7 100644 --- a/panda/src/physics/physicsManager.I +++ b/panda/src/physics/physicsManager.I @@ -23,9 +23,9 @@ //////////////////////////////////////////////////////////////////// INLINE void PhysicsManager:: attach_physical(Physical *p) { - nassertv(p); + nassertv(p && p->_physics_manager == NULL); p->_physics_manager = this; - pvector< Physical * >::iterator found; + PhysicalsVector::iterator found; found = find(_physicals.begin(), _physicals.end(), p); if (found == _physicals.end()) { _physicals.push_back(p); diff --git a/panda/src/physics/physicsManager.cxx b/panda/src/physics/physicsManager.cxx index 435e67fd21..e8fd316a7c 100644 --- a/panda/src/physics/physicsManager.cxx +++ b/panda/src/physics/physicsManager.cxx @@ -45,6 +45,11 @@ PhysicsManager() { //////////////////////////////////////////////////////////////////// PhysicsManager:: ~PhysicsManager() { + PhysicalsVector::iterator pi; + for (pi = _physicals.begin(); pi != _physicals.end(); ++pi) { + nassertv((*pi)->_physics_manager == this); + (*pi)->_physics_manager = NULL; + } } //////////////////////////////////////////////////////////////////// @@ -115,7 +120,7 @@ remove_physical(Physical *p) { return; } nassertv(*found == p); - nassertv(p->_physics_manager != (PhysicsManager *) NULL); + nassertv(p->_physics_manager == this); p->_physics_manager = (PhysicsManager *) NULL; _physicals.erase(found); nassertv(_physicals.end() == find(_physicals.begin(), _physicals.end(), p));