Commit 529233cc authored by Daniel Veillard's avatar Daniel Veillard
Browse files

some updates with memory debugging facilities while messing with libxslt

* xmlmemory.c python/libxml.c python/libxml2-python-api.xml:
  some updates with memory debugging facilities while messing
  with libxslt python bindings
Daniel
parent f93a8660
Fri Jul 2 14:22:14 CEST 2004 Daniel Veillard <daniel@veillard.com>
* xmlmemory.c python/libxml.c python/libxml2-python-api.xml:
some updates with memory debugging facilities while messing
with libxslt python bindings
Thu Jul 1 14:53:36 CEST 2004 Daniel Veillard <daniel@veillard.com>
 
* python/libxml.c python/generator.py python/libxml.py
......
......@@ -78,6 +78,18 @@ static xmlStrdupFunc strdupFunc = NULL;
static void
libxml_xmlErrorInitialize(void); /* forward declare */
PyObject *
libxml_xmlMemoryUsed(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
{
long ret;
PyObject *py_retval;
ret = xmlMemUsed();
py_retval = libxml_longWrap(ret);
return (py_retval);
}
PyObject *
libxml_xmlDebugMemory(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
{
......
......@@ -310,5 +310,9 @@
<info>Cleanup function for the XML library. It tries to reclaim all parsing related global memory allocated for the library processing. It doesn't deallocate any document related memory. Calling this function should not prevent reusing the library but one should call xmlCleanupParser() only when the process has finished using the library or XML document built with it.</info>
<return type='void'/>
</function>
<function name='xmlMemoryUsed' file='python'>
<info>Returns the total amount of memory allocated by libxml2</info>
<return type='int' info='number of bytes allocated'/>
</function>
</symbols>
</api>
......@@ -149,6 +149,7 @@ debugMemory()
dumpMemory()
htmlCreatePushParser()
htmlSAXParseFile()
memoryUsed()
newNode()
pythonCleanupParser()
setEntityLoader()
......
......@@ -310,6 +310,9 @@ xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
{
MEMHDR *p;
unsigned long number;
#ifdef DEBUG_MEMORY
size_t oldsize;
#endif
if (ptr == NULL)
return(xmlMallocLoc(size, file, line));
......@@ -326,6 +329,9 @@ xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
p->mh_tag = ~MEMTAG;
xmlMutexLock(xmlMemMutex);
debugMemSize -= p->mh_size;
#ifdef DEBUG_MEMORY
oldsize = p->mh_size;
#endif
#ifdef MEM_LIST
debugmem_list_delete(p);
#endif
......@@ -357,6 +363,10 @@ xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
TEST_POINT
#ifdef DEBUG_MEMORY
xmlGenericError(xmlGenericErrorContext,
"Realloced(%d to %d) Ok\n", oldsize, size);
#endif
return(HDR_2_CLIENT(p));
error:
......@@ -389,6 +399,9 @@ xmlMemFree(void *ptr)
{
MEMHDR *p;
char *target;
#ifdef DEBUG_MEMORY
size_t size;
#endif
if (ptr == (void *) -1) {
xmlGenericError(xmlGenericErrorContext,
......@@ -415,6 +428,9 @@ xmlMemFree(void *ptr)
memset(target, -1, p->mh_size);
xmlMutexLock(xmlMemMutex);
debugMemSize -= p->mh_size;
#ifdef DEBUG_MEMORY
size = p->mh_size;
#endif
#ifdef MEM_LIST
debugmem_list_delete(p);
#endif
......@@ -424,6 +440,11 @@ xmlMemFree(void *ptr)
TEST_POINT
#ifdef DEBUG_MEMORY
xmlGenericError(xmlGenericErrorContext,
"Freed(%d) Ok\n", size);
#endif
return;
error:
......@@ -619,12 +640,15 @@ xmlMemDisplay(FILE *fp)
switch (p->mh_type) {
case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
default:fprintf(fp," ??? in ");break;
case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
default:
fprintf(fp,"Unknow memory block, corruped maybe");
xmlMutexUnlock(xmlMemMutex);
return;
}
if (p->mh_file != NULL) fprintf(fp,"%s(%d)", p->mh_file, p->mh_line);
if (p->mh_file != NULL) fprintf(fp,"%s(%d)", p->mh_file, p->mh_line);
if (p->mh_tag != MEMTAG)
fprintf(fp," INVALID");
nb++;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment