From a146bbc293eda9adef0bbd3e744eb7d17f026238 Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Wed, 31 Oct 2007 08:17:48 +0000 Subject: [PATCH] more memory leak fixes in demo and btSimpleBroadphase. - deleting object (END key) needs to release - call destructor of pair cache --- Demos/OpenGL/DemoApplication.cpp | 9 +++++++++ .../BroadphaseCollision/btSimpleBroadphase.cpp | 1 + .../BroadphaseCollision/btSimpleBroadphase.h | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Demos/OpenGL/DemoApplication.cpp b/Demos/OpenGL/DemoApplication.cpp index 4e7f39ae9..3f3757371 100644 --- a/Demos/OpenGL/DemoApplication.cpp +++ b/Demos/OpenGL/DemoApplication.cpp @@ -417,7 +417,16 @@ void DemoApplication::specialKeyboard(int key, int x, int y) if (numObj) { btCollisionObject* obj = getDynamicsWorld()->getCollisionObjectArray()[numObj-1]; + getDynamicsWorld()->removeCollisionObject(obj); + btRigidBody* body = btRigidBody::upcast(obj); + if (body && body->getMotionState()) + { + delete body->getMotionState(); + } + delete obj; + + } break; } diff --git a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp index ff753ae5f..e0bb09929 100644 --- a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp +++ b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp @@ -77,6 +77,7 @@ btSimpleBroadphase::~btSimpleBroadphase() if (m_ownsPairCache) { + m_pairCache->~btOverlappingPairCache(); btAlignedFree(m_pairCache); } } diff --git a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h index d40cd5561..ceb09ac8c 100644 --- a/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h +++ b/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h @@ -77,7 +77,7 @@ protected: void freeHandle(btSimpleBroadphaseProxy* proxy) { int handle = int(proxy-m_pHandles); - btAssert(handle > 0 && handle < m_maxHandles); + btAssert(handle >= 0 && handle < m_maxHandles); proxy->SetNextFree(m_firstFreeHandle); m_firstFreeHandle = handle;