From 59c78f11c8e5bd9d4c27ab0b30576723c30317cd Mon Sep 17 00:00:00 2001 From: Khaled Noaman <knoaman@apache.org> Date: Thu, 29 May 2003 13:26:44 +0000 Subject: [PATCH] Fix memory leak when using deprecated dom. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175058 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/util/ValueStackOf.c | 8 ++++++-- src/xercesc/util/ValueStackOf.hpp | 6 +++++- src/xercesc/util/ValueVectorOf.c | 18 +++++++++++++++--- src/xercesc/util/ValueVectorOf.hpp | 5 +++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/xercesc/util/ValueStackOf.c b/src/xercesc/util/ValueStackOf.c index 766125875..e3d5f5909 100644 --- a/src/xercesc/util/ValueStackOf.c +++ b/src/xercesc/util/ValueStackOf.c @@ -56,6 +56,9 @@ /** * $Log$ + * Revision 1.4 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.3 2003/05/16 06:01:52 knoaman * Partial implementation of the configurable memory manager. * @@ -97,9 +100,10 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- template <class TElem> ValueStackOf<TElem>::ValueStackOf(const unsigned int fInitCapacity, - MemoryManager* const manager) : + MemoryManager* const manager, + const bool toCallDestructor) : - fVector(fInitCapacity, manager) + fVector(fInitCapacity, manager, toCallDestructor) { } diff --git a/src/xercesc/util/ValueStackOf.hpp b/src/xercesc/util/ValueStackOf.hpp index 58cec23e0..6257bc63d 100644 --- a/src/xercesc/util/ValueStackOf.hpp +++ b/src/xercesc/util/ValueStackOf.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.5 2003/05/16 06:01:52 knoaman * Partial implementation of the configurable memory manager. * @@ -114,7 +117,8 @@ public : ValueStackOf ( const unsigned int fInitCapacity - , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , const bool toCallDestructor = false ); ~ValueStackOf(); diff --git a/src/xercesc/util/ValueVectorOf.c b/src/xercesc/util/ValueVectorOf.c index 78d0b8200..8c2b83ffd 100644 --- a/src/xercesc/util/ValueVectorOf.c +++ b/src/xercesc/util/ValueVectorOf.c @@ -56,6 +56,9 @@ /** * $Log$ + * Revision 1.7 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.6 2003/05/20 21:06:30 knoaman * Set values to 0. * @@ -112,9 +115,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- template <class TElem> ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems, - MemoryManager* const manager) : + MemoryManager* const manager, + const bool toCallDestructor) : - fCurCount(0) + fCallDestructor(toCallDestructor) + , fCurCount(0) , fMaxCount(maxElems) , fElemList(0) , fMemoryManager(manager) @@ -130,7 +135,8 @@ ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems, template <class TElem> ValueVectorOf<TElem>::ValueVectorOf(const ValueVectorOf<TElem>& toCopy) : - fCurCount(toCopy.fCurCount) + fCallDestructor(toCopy.fCallDestructor) + , fCurCount(toCopy.fCurCount) , fMaxCount(toCopy.fMaxCount) , fElemList(0) , fMemoryManager(toCopy.fMemoryManager) @@ -139,12 +145,18 @@ ValueVectorOf<TElem>::ValueVectorOf(const ValueVectorOf<TElem>& toCopy) : ( fMaxCount * sizeof(TElem) ); //new TElem[fMaxCount]; + + memset(fElemList, 0, fMaxCount * sizeof(TElem)); for (unsigned int index = 0; index < fCurCount; index++) fElemList[index] = toCopy.fElemList[index]; } template <class TElem> ValueVectorOf<TElem>::~ValueVectorOf() { + if (fCallDestructor) { + for (int index= fMaxCount - 1; index >= 0; index--) + fElemList[index].~TElem(); + } fMemoryManager->deallocate(fElemList); //delete [] fElemList; } diff --git a/src/xercesc/util/ValueVectorOf.hpp b/src/xercesc/util/ValueVectorOf.hpp index 93f9b09d3..d0871331c 100644 --- a/src/xercesc/util/ValueVectorOf.hpp +++ b/src/xercesc/util/ValueVectorOf.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/29 13:26:44 knoaman + * Fix memory leak when using deprecated dom. + * * Revision 1.6 2003/05/16 21:37:00 knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * @@ -120,6 +123,7 @@ public : ( const unsigned int maxElems , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + , const bool toCallDestructor = false ); ValueVectorOf(const ValueVectorOf<TElem>& toCopy); ~ValueVectorOf(); @@ -174,6 +178,7 @@ private: // The list of elements, which is dynamically allocated to the needed // size. // ----------------------------------------------------------------------- + bool fCallDestructor; unsigned int fCurCount; unsigned int fMaxCount; TElem* fElemList; -- GitLab