From: <hid...@us...> - 2006-11-04 18:31:36
|
Revision: 1132 http://svn.sourceforge.net/opende/?rev=1132&view=rev Author: hidden_asbestos Date: 2006-11-04 10:31:25 -0800 (Sat, 04 Nov 2006) Log Message: ----------- Fix for memory leak of static memory allocated in the OPCODE collider. Applications must ensure to call dCloseODE before running memory leak checking functions. Modified Paths: -------------- trunk/OPCODE/OPC_RayCollider.h trunk/ode/src/collision_kernel.cpp trunk/ode/src/collision_trimesh_opcode.cpp Modified: trunk/OPCODE/OPC_RayCollider.h =================================================================== --- trunk/OPCODE/OPC_RayCollider.h 2006-11-04 17:12:50 UTC (rev 1131) +++ trunk/OPCODE/OPC_RayCollider.h 2006-11-04 18:31:25 UTC (rev 1132) @@ -33,7 +33,7 @@ float mU, mV; //!< Impact barycentric coordinates }; - class OPCODE_API CollisionFaces : private Container + class OPCODE_API CollisionFaces : public Container { public: //! Constructor Modified: trunk/ode/src/collision_kernel.cpp =================================================================== --- trunk/ode/src/collision_kernel.cpp 2006-11-04 17:12:50 UTC (rev 1131) +++ trunk/ode/src/collision_kernel.cpp 2006-11-04 18:31:25 UTC (rev 1132) @@ -1065,9 +1065,11 @@ // initialization and shutdown routines - allocate and initialize data, // cleanup before exiting +extern void opcode_collider_cleanup(); + void dInitODE() { -#if dTRIMESH_GIMPACT +#if dTRIMESH_ENABLED && dTRIMESH_GIMPACT gimpact_init(); #endif } @@ -1077,7 +1079,13 @@ colliders_initialized = 0; num_user_classes = 0; dClearPosrCache(); -#if dTRIMESH_GIMPACT + +#if dTRIMESH_ENABLED && dTRIMESH_GIMPACT gimpact_terminate(); #endif + +#if dTRIMESH_ENABLED && dTRIMESH_OPCODE + // Free up static allocations in opcode + opcode_collider_cleanup(); +#endif } Modified: trunk/ode/src/collision_trimesh_opcode.cpp =================================================================== --- trunk/ode/src/collision_trimesh_opcode.cpp 2006-11-04 17:12:50 UTC (rev 1131) +++ trunk/ode/src/collision_trimesh_opcode.cpp 2006-11-04 18:31:25 UTC (rev 1132) @@ -562,7 +562,22 @@ // } +// Cleanup for allocations when shutting down ODE +void opcode_collider_cleanup() +{ +#if dTRIMESH_ENABLED + + // Clear TC caches + dxTriMesh::Faces.Empty(); + dxTriMesh::defaultSphereCache.TouchedPrimitives.Empty(); + dxTriMesh::defaultBoxCache.TouchedPrimitives.Empty(); + dxTriMesh::defaultCapsuleCache.TouchedPrimitives.Empty(); +#endif // dTRIMESH_ENABLED +} + + + void dxTriMesh::ClearTCCache() { #if dTRIMESH_ENABLED This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |