diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.cpp b/src/xercesc/dom/impl/DOMDocumentImpl.cpp index 16602faa4626e16ea326633bf7682fa370d4b4bc..486f174e2c1de05ba5ec8d1934d969c348cdf26d 100644 --- a/src/xercesc/dom/impl/DOMDocumentImpl.cpp +++ b/src/xercesc/dom/impl/DOMDocumentImpl.cpp @@ -1327,16 +1327,21 @@ void DOMDocumentImpl::release() void DOMDocumentImpl::releaseDocNotifyUserData(DOMNode* object) { DOMNode *child = object->getFirstChild(); - if (child != 0) + + while( child != 0) { - while( child != 0) - { - releaseDocNotifyUserData(child); - child = child->getNextSibling(); - } + + DOMNamedNodeMap *attrlist=child->getAttributes(); + + if(attrlist!=0) + for(XMLSize_t i=0;i<attrlist->getLength();++i) + releaseDocNotifyUserData(attrlist->item(i)); + + releaseDocNotifyUserData(child); + child = child->getNextSibling(); } - else - castToNodeImpl(object)->callUserDataHandlers(DOMUserDataHandler::NODE_DELETED, 0, 0); + + castToNodeImpl(object)->callUserDataHandlers(DOMUserDataHandler::NODE_DELETED, 0, 0); } void DOMDocumentImpl::release(DOMNode* object, NodeObjectType type)