Hello Александр,

Have you tried Valgrind?

João M. S. Silva

On 5/29/19 8:24 AM, Александр Федоров wrote:
Hello!
I have simple program which reuses created document with different elements
that seems to be leaking. To demonstrate the problem I create new
DOMElement, add it to document, then immediately remove it and release. I
do it for rather big number of times.

Here is the code snippet:

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/XMLString.hpp>
#include <iostream>
#include <fstream>
#include <zconf.h>

void process_mem_usage() {
double vm = 0.;
double rss = 0.;

unsigned long vsize;
long lrss;
{
std::string ignore;
std::ifstream ifs("/proc/self/stat", std::ios_base::in);
ifs >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore
ignore >> ignore >> ignore
ignore >> ignore >> ignore >> ignore >> ignore >> ignore >> ignore >>
ignore >> ignore >> ignore
ignore >> ignore >> vsize >> lrss;
}

long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
vm = vsize / 1024.;
rss = lrss * page_size_kb;
std::cout << "VM: " << vm << "; RSS: " << rss << " (Kb)" << std::endl;
}

int main() {
     using namespace xercesc_3_2;

     XMLPlatformUtils::Initialize();

     XMLCh * const tempStr = new XMLCh[100];
     XMLString::transcode("Range", tempStr, 99);
     DOMImplementation *impl =
DOMImplementationRegistry::getDOMImplementation(tempStr);

     XMLString::transcode("root", tempStr, 99);
     DOMDocument *doc = impl->createDocument(nullptr, tempStr, nullptr);
     DOMElement *root = doc->getDocumentElement();

     process_mem_usage();

     for(auto i = 0; i < 100; ++i) {
for(auto j = 0; j < 1000; ++j) {
XMLString::transcode("FirstElement", tempStr, 99);
DOMElement *el = doc->createElement(tempStr);
root->appendChild(el);

auto removed = (DOMElement *) root->removeChild(el);
removed->release();
}
process_mem_usage();
}

doc->release();
process_mem_usage();
delete[] tempStr;
process_mem_usage();

XMLPlatformUtils::Terminate()
return 0;
}

So I expect RSS to be unchanged or quite stable, but it rises continuously.


Reply via email to