Nick,

Yes I think that's the same problem ...

Tinny

Nick Denning wrote:

> Dear People,
>
> I have just joined the mailing list to enquire on a problem I think I have
> with the XERCES-C 1.5 parser which I think has a memory leak.  I have
> checked the obvious things, having been a Xerces programmer for over a year
> now.  I have now just received this bug report, while in the process of
> trying to send the details of the memory leak that I had located.
> (Unfortunately I first sent it without a subject and then with a large zip
> file attached showing all my boundchecker screen shots that rather exceeded
> the 100k message limit).
>
> I wonder if the person that has reported this problem as fixed could confirm
> that this affects the details in my attachment below.
>
> The problem I had found manifests itself when I am using bounds checker, and
> the attached word document gives the full scenario and details of the pieces
> that are leaking.  Bounds checker reports overwriting an array and the
> circumstances pointing to the existance of a problem are pretty compelling.
>
> Incidentally this does not happen for small messages, as I include in the
> zip file (that I cannot currently send) an MS project and example messages
> that will work without leak, as well as messages that give a problem.
> Message 3 gives both the leakage of entries during the build process and the
> leakage of memory at the clean up phase, while the smaller messages 4 and 3
> only give the first leakage, while message 6 goes through cleanly.  (Message
> 1 and 2 were my starting point).
>
> If anyone would like the zip file I can send it to them directly.
>
> Nick
>
> Nick Denning
> Strategic Thought Limited
> The Old Town Hall
> 4 Queens Road
> London SW19 8YA
> tel: +44 (0)20 8410 4000
> fax: +44 (0)20 8410 4030
> mob: +44 (0)7710 338072
> website: http://www.strategicthought.co.uk
> <http://www.strategicthought.co.uk>
> ARM website: http://www.arm-risk.com <http://www.arm-risk.com>
>
> //
> ---------------------------------------------------------------------------
> //  ElemStack: Stack top access
> //
> ---------------------------------------------------------------------------
> unsigned int ElemStack::addChild(QName* const child, const bool toParent)
> {
>     if (!fStackTop)
>         ThrowXML(EmptyStackException, XMLExcepts::ElemStack_EmptyStack);
>
>     //
>     //  If they want to add to the parent, then we have to have at least two
>     //  elements on the stack.
>     //
>     if (toParent && (fStackTop < 2))
>         ThrowXML(NoSuchElementException,
> XMLExcepts::ElemStack_NoParentPushed);
>
>     // Get a convenience pointer to the stack top row
>     StackElem* curRow = toParent
>                         ? fStack[fStackTop - 2] : fStack[fStackTop - 1];
>
>     // See if we need to expand this row's child array
>     if (curRow->fChildCount == curRow->fChildCapacity)
>     {
>         // Increase the capacity by a quarter and allocate a new row
>         const unsigned int newCapacity = curRow->fChildCapacity ?
>                                          (unsigned
> int)(curRow->fChildCapacity * 1.25) :
>                                          32;
>         QName** newRow = new QName*[newCapacity];
>
>         //
>         //  Copy over the old contents. We don't have to initialize the new
>         //  part because The current child count is used to know how much of
>         //  it is valid.
>         //
>         //  Only both doing this if there is any current content, since
>         //  this code also does the initial faulting in of the array when
>         //  both the current capacity and child count are zero.
>         //
>         if (curRow->fChildCount)
>         {
>              unsigned int index = 0;
>              for (; index < curRow->fChildCount; index++)
>                  newRow[index] = curRow->fChildren[index];
>         }
>
>         // Clean up the old children and store the new info
>         delete [] curRow->fChildren;
>         curRow->fChildren = newRow;
>         curRow->fChildCapacity = newCapacity;
>     }
>
>     // Add this id to the end of the row's child id array and bump the count
>     curRow->fChildren[curRow->fChildCount++] = new QName(child);
>
>     // Return the level of the index we just filled (before the bump)
>     return curRow->fChildCount - 1;
> }
>
> ElemStack::~ElemStack()
> {
>     //
>     //  Start working from the bottom of the stack and clear it out as we
>     //  go up. Once we hit an uninitialized one, we can break out.
>     //
>     for (unsigned int stackInd = 0; stackInd < fStackCapacity; stackInd++)
>     {
>         // If this entry has been set, then lets clean it up
>         if (!fStack[stackInd])
>             break;
>
>         // Delete the row for this entry, then delete the row structure
>         for (unsigned int childIndex = 0; childIndex <
> fStack[stackInd]->fChildCount; ++childIndex)
>             delete fStack[stackInd]->fChildren[childIndex];
>
>         delete [] fStack[stackInd]->fChildren;
>         delete [] fStack[stackInd]->fMap;
>         delete fStack[stackInd];
>     }
>
>     // Delete the stack array itself now
>     delete [] fStack;
> }
>
> The bits in red above are the locations where the major leaks are occuring.
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [ mailto:[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]> ]
> Sent: 10 July 2001 17:17
> To: [EMAIL PROTECTED]
> Subject: [Bug 2426] - memory leak in parser
>
> http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2426
> <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2426>
>
> *** shadow/2426Sat Jul  7 17:36:31 2001
> --- shadow/2426.tmp.25827       Tue Jul 10 09:17:08 2001
> ***************
> *** 2,8 ****
>   | memory leak in parser
> |
>
> +---------------------------------------------------------------------------
> -+
>   |        Bug #: 2426                        Product: Xerces-C
> |
> ! |       Status: RESOLVED                    Version: 1.5
> |
>   |   Resolution: FIXED                      Platform: PC
> |
>   |     Severity: Normal                   OS/Version: Other
> |
>   |     Priority: Other                     Component: DOM
> |
> --- 2,8 ----
>   | memory leak in parser
> |
>
> +---------------------------------------------------------------------------
> -+
>   |        Bug #: 2426                        Product: Xerces-C
> |
> ! |       Status: CLOSED                      Version: 1.5
> |
>   |   Resolution: FIXED                      Platform: PC
> |
>   |     Severity: Normal                   OS/Version: Other
> |
>   |     Priority: Other                     Component: DOM
> |
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> *************************************************************************
> This message contains privileged and confidential information intended
> only for the use of the recipient named above. Its contents do not
> constitute a commitment by Strategic Thought Limited ("Strategic
> Thought") unless separately endorsed by an authorised representative
> of Strategic Thought.
>
> Any use, dissemination, distribution, reproduction or unauthorised
> disclosure of this message is prohibited. If you receive this message
> in error, please notify the sender immediately and delete it from your
> computer systems.
>
> Any views expressed in this message are those of the individual sender
> and may not necessarily reflect those of Strategic Thought.
>
> Strategic Thought believes this e-mail and any attachments to be virus
> free. However, the recipient is responsible for ensuring it is virus
> free and Strategic Thought do not accept any responsibility for any
> loss or damage howsoever caused from use of this e-mail, attachments
> or contents.
> *************************************************************************
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to