diff --git a/CMakeLists.txt b/CMakeLists.txt
index c652a0aa..efff2ccc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,7 +37,6 @@ option(LIBXML2_WITH_ICU "Add ICU support" OFF)
option(LIBXML2_WITH_ISO8859X "Add ISO8859X support if no iconv" ON)
option(LIBXML2_WITH_LEGACY "Add deprecated APIs for compatibility" OFF)
option(LIBXML2_WITH_LZMA "Use liblzma" OFF)
-option(LIBXML2_WITH_MEM_DEBUG "Add the memory debugging module" OFF)
option(LIBXML2_WITH_MODULES "Add the dynamic modules support" ON)
option(LIBXML2_WITH_OUTPUT "Add the serialization support" ON)
option(LIBXML2_WITH_PATTERN "Add the xmlPattern selection interface" ON)
@@ -73,7 +72,7 @@ if(LIBXML2_WITH_PYTHON)
CACHE PATH "Python bindings install directory")
endif()
-foreach(VARIABLE IN ITEMS WITH_AUTOMATA WITH_C14N WITH_CATALOG WITH_DEBUG WITH_EXPR WITH_FTP WITH_HTML WITH_HTTP WITH_ICONV WITH_ICU WITH_ISO8859X WITH_LEGACY WITH_LZMA WITH_MEM_DEBUG WITH_MODULES WITH_OUTPUT WITH_PATTERN WITH_PUSH WITH_READER WITH_REGEXPS WITH_SAX1 WITH_SCHEMAS WITH_SCHEMATRON WITH_THREADS WITH_THREAD_ALLOC WITH_TREE WITH_UNICODE WITH_VALID WITH_WRITER WITH_XINCLUDE WITH_XPATH WITH_XPTR WITH_XPTR_LOCS WITH_ZLIB)
+foreach(VARIABLE IN ITEMS WITH_AUTOMATA WITH_C14N WITH_CATALOG WITH_DEBUG WITH_EXPR WITH_FTP WITH_HTML WITH_HTTP WITH_ICONV WITH_ICU WITH_ISO8859X WITH_LEGACY WITH_LZMA WITH_MODULES WITH_OUTPUT WITH_PATTERN WITH_PUSH WITH_READER WITH_REGEXPS WITH_SAX1 WITH_SCHEMAS WITH_SCHEMATRON WITH_THREADS WITH_THREAD_ALLOC WITH_TREE WITH_UNICODE WITH_VALID WITH_WRITER WITH_XINCLUDE WITH_XPATH WITH_XPTR WITH_XPTR_LOCS WITH_ZLIB)
if(LIBXML2_${VARIABLE})
set(${VARIABLE} 1)
else()
diff --git a/README.md b/README.md
index 716cb112..0256d5f9 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,6 @@ The following options disable or enable code modules and relevant symbols:
--with-icu ICU support (off)
--with-iso8859x ISO-8859-X support if no iconv (on)
--with-lzma[=DIR] use liblzma in DIR (off)
- --with-mem-debug memory debugging module (off)
--with-modules dynamic modules support (on)
--with-output serialization support (on)
--with-pattern xmlPattern selection interface (on)
diff --git a/configure.ac b/configure.ac
index 0b3ed49b..6d05f6c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -87,8 +87,6 @@ AC_ARG_WITH(iso8859x,
[ --with-iso8859x ISO-8859-X support if no iconv (on)])
AC_ARG_WITH(lzma,
[ --with-lzma[[=DIR]] use liblzma in DIR (off)])
-AC_ARG_WITH(mem_debug,
-[ --with-mem-debug memory debugging module (off)])
AC_ARG_WITH(modules,
[ --with-modules dynamic modules support (on)])
AC_ARG_WITH(output,
@@ -233,7 +231,6 @@ if test "$with_minimum" = "yes"; then
test "$with_iconv" = "" && with_iconv=no
test "$with_iso8859x" = "" && with_iso8859x=no
test "$with_lzma" = "" && with_lzma=no
- test "$with_mem_debug" = "" && with_mem_debug=no
test "$with_output" = "" && with_output=no
test "$with_pattern" = "" && with_pattern=no
test "$with_push" = "" && with_push=no
@@ -721,19 +718,6 @@ fi
AC_SUBST(WITH_DEBUG)
AM_CONDITIONAL(WITH_DEBUG_SOURCES, test "$WITH_DEBUG" = "1")
-if test "$with_mem_debug" = "yes" ; then
- if test "$with_thread_alloc" = "yes" ; then
- echo Disabling memory debug - cannot use mem-debug with thread-alloc!
- WITH_MEM_DEBUG=0
- else
- echo Enabling memory debug support
- WITH_MEM_DEBUG=1
- fi
-else
- WITH_MEM_DEBUG=0
-fi
-AC_SUBST(WITH_MEM_DEBUG)
-
dnl
dnl Check for Python
dnl
diff --git a/debugXML.c b/debugXML.c
index e9bfd0a3..75d0bf26 100644
--- a/debugXML.c
+++ b/debugXML.c
@@ -2944,15 +2944,6 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
#endif /* LIBXML_OUTPUT_ENABLED */
} else if (!strcmp(command, "grep")) {
xmlShellGrep(ctxt, arg, ctxt->node, NULL);
- } else if (!strcmp(command, "free")) {
- if (arg[0] == 0) {
- xmlMemShow(ctxt->output, 0);
- } else {
- int len = 0;
-
- sscanf(arg, "%d", &len);
- xmlMemShow(ctxt->output, len);
- }
} else if (!strcmp(command, "pwd")) {
char dir[500];
diff --git a/doc/xmllint.xml b/doc/xmllint.xml
index 8d4b2053..97c88200 100644
--- a/doc/xmllint.xml
+++ b/doc/xmllint.xml
@@ -731,13 +731,6 @@
-
- free
-
- Display memory usage.
-
-
-
load FILENAME
diff --git a/globals.c b/globals.c
index affbf6ad..1e666bdc 100644
--- a/globals.c
+++ b/globals.c
@@ -175,13 +175,6 @@ static unsigned xmlMainThreadRngState[2];
* Memory allocation routines
*/
-#if defined(DEBUG_MEMORY_LOCATION)
-xmlFreeFunc xmlFree = (xmlFreeFunc) xmlMemFree;
-xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
-xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
-xmlReallocFunc xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
-xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
-#else
/**
* xmlFree:
* @mem: an already allocated block of memory
@@ -240,7 +233,6 @@ xmlPosixStrdup(const char *cur) {
* Returns the copy of the string or NULL in case of error
*/
xmlStrdupFunc xmlMemStrdup = xmlPosixStrdup;
-#endif /* DEBUG_MEMORY_LOCATION */
/**
* xmlBufferAllocScheme:
@@ -777,19 +769,11 @@ xmlInitGlobalState(xmlGlobalStatePtr gs) {
gs->gs_xmlDoValidityCheckingDefaultValue =
xmlDoValidityCheckingDefaultValueThrDef;
#ifdef LIBXML_THREAD_ALLOC_ENABLED
-#ifdef DEBUG_MEMORY_LOCATION
- gs->gs_xmlFree = xmlMemFree;
- gs->gs_xmlMalloc = xmlMemMalloc;
- gs->gs_xmlMallocAtomic = xmlMemMalloc;
- gs->gs_xmlRealloc = xmlMemRealloc;
- gs->gs_xmlMemStrdup = xmlMemoryStrdup;
-#else
gs->gs_xmlFree = free;
gs->gs_xmlMalloc = malloc;
gs->gs_xmlMallocAtomic = malloc;
gs->gs_xmlRealloc = realloc;
gs->gs_xmlMemStrdup = xmlPosixStrdup;
-#endif
#endif
gs->gs_xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
#ifdef LIBXML_OUTPUT_ENABLED
diff --git a/include/libxml/meson.build b/include/libxml/meson.build
index 03b7847d..4355e31c 100644
--- a/include/libxml/meson.build
+++ b/include/libxml/meson.build
@@ -17,7 +17,6 @@ xmlversion_h.set10('WITH_LEGACY', want_legacy)
xmlversion_h.set10('WITH_LZMA', want_lzma)
xmlversion_h.set10('WITH_MODULES', with_modules)
xmlversion_h.set('MODULE_EXTENSION', module_extension)
-xmlversion_h.set10('WITH_MEM_DEBUG', want_mem_debug)
xmlversion_h.set10('WITH_OUTPUT', want_output)
xmlversion_h.set10('WITH_PATTERN', want_pattern)
xmlversion_h.set10('WITH_PUSH', want_push)
diff --git a/include/libxml/xmlmemory.h b/include/libxml/xmlmemory.h
index 097e3c8f..1de3e9fc 100644
--- a/include/libxml/xmlmemory.h
+++ b/include/libxml/xmlmemory.h
@@ -147,12 +147,16 @@ XMLPUBFUN int
xmlMemUsed (void);
XMLPUBFUN int
xmlMemBlocks (void);
+XML_DEPRECATED
XMLPUBFUN void
xmlMemDisplay (FILE *fp);
+XML_DEPRECATED
XMLPUBFUN void
xmlMemDisplayLast(FILE *fp, long nbBytes);
+XML_DEPRECATED
XMLPUBFUN void
xmlMemShow (FILE *fp, int nr);
+XML_DEPRECATED
XMLPUBFUN void
xmlMemoryDump (void);
XMLPUBFUN void *
@@ -163,60 +167,19 @@ XMLPUBFUN void
xmlMemFree (void *ptr);
XMLPUBFUN char *
xmlMemoryStrdup (const char *str);
+XML_DEPRECATED
XMLPUBFUN void *
xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
+XML_DEPRECATED
XMLPUBFUN void *
xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
+XML_DEPRECATED
XMLPUBFUN void *
xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
+XML_DEPRECATED
XMLPUBFUN char *
xmlMemStrdupLoc (const char *str, const char *file, int line);
-
-/** DOC_DISABLE */
-#ifdef DEBUG_MEMORY_LOCATION
-/**
- * xmlMalloc:
- * @size: number of bytes to allocate
- *
- * Wrapper for the malloc() function used in the XML library.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
-/**
- * xmlMallocAtomic:
- * @size: number of bytes to allocate
- *
- * Wrapper for the malloc() function used in the XML library for allocation
- * of block not containing pointers to other areas.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
-/**
- * xmlRealloc:
- * @ptr: pointer to the existing allocated area
- * @size: number of bytes to allocate
- *
- * Wrapper for the realloc() function used in the XML library.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
-/**
- * xmlMemStrdup:
- * @str: pointer to the existing string
- *
- * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
-
-#endif /* DEBUG_MEMORY_LOCATION */
-/** DOC_ENABLE */
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
index df516fe4..f153a942 100644
--- a/include/libxml/xmlversion.h.in
+++ b/include/libxml/xmlversion.h.in
@@ -262,15 +262,6 @@
#define LIBXML_DEBUG_ENABLED
#endif
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if @WITH_MEM_DEBUG@
-#define DEBUG_MEMORY_LOCATION
-#endif
-
/**
* LIBXML_UNICODE_ENABLED:
*
diff --git a/meson.build b/meson.build
index f72de1ae..582badf4 100644
--- a/meson.build
+++ b/meson.build
@@ -67,7 +67,6 @@ want_ipv6 = get_option('ipv6')
want_iso8859x = get_option('iso8859x')
want_legacy = get_option('legacy')
want_lzma = get_option('lzma')
-want_mem_debug = get_option('mem-debug')
want_modules = get_option('modules')
want_output = get_option('output')
want_pattern = get_option('pattern')
@@ -188,7 +187,6 @@ if get_option('minimum')
want_ipv6 = false
want_iso8859x = false
want_lzma = false
- want_mem_debug = false
want_modules = false
want_output = false
want_pattern = false
@@ -846,7 +844,6 @@ summary(
'iso8859x': want_iso8859x,
'legacy': want_legacy,
'lzma': want_lzma,
- 'mem-debug': want_mem_debug,
'modules': want_modules,
'output': want_output,
'pattern': want_pattern,
diff --git a/meson_options.txt b/meson_options.txt
index ea66b306..48119c8e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -15,7 +15,6 @@
# [X] iso8859x
# [X] legacy
# [X] lzma
-# [X] mem-debug
# [X] modules
# [X] output
# [X] pattern
@@ -129,12 +128,6 @@ option('lzma',
description: 'LZMA support'
)
-option('mem-debug',
- type: 'boolean',
- value: false,
- description: 'Memory debugging module'
-)
-
option('modules',
type: 'boolean',
value: true,
diff --git a/parser.c b/parser.c
index 8af8aeab..bfe96fd3 100644
--- a/parser.c
+++ b/parser.c
@@ -685,11 +685,7 @@ xmlHasFeature(xmlFeature feature)
return(0);
#endif
case XML_WITH_DEBUG_MEM:
-#ifdef DEBUG_MEMORY_LOCATION
- return(1);
-#else
return(0);
-#endif
case XML_WITH_ZLIB:
#ifdef LIBXML_ZLIB_ENABLED
return(1);
diff --git a/python/libxml.c b/python/libxml.c
index 6bf06d57..5b30b34a 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -185,17 +185,6 @@ libxml_xmlPythonCleanupParser(PyObject *self ATTRIBUTE_UNUSED,
return(Py_None);
}
-PyObject *
-libxml_xmlDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
- ATTRIBUTE_UNUSED PyObject * args)
-{
-
- if (libxmlMemoryDebug != 0)
- xmlMemoryDump();
- Py_INCREF(Py_None);
- return (Py_None);
-}
-
/************************************************************************
* *
* Handling Python FILE I/O at the C level *
diff --git a/python/libxml.py b/python/libxml.py
index 1e458d17..4dd8d1b8 100644
--- a/python/libxml.py
+++ b/python/libxml.py
@@ -779,6 +779,12 @@ def popInputCallbacks():
if len(__input_callbacks) == 0:
libxml2mod.xmlUnregisterInputCallback()
+#
+# Deprecated
+#
+def dumpMemory():
+ """DEPRECATED: This feature was removed."""
+
# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
#
# Everything before this line comes from libxml.py
diff --git a/python/libxml2-python-api.xml b/python/libxml2-python-api.xml
index e84faad6..a2d9bc99 100644
--- a/python/libxml2-python-api.xml
+++ b/python/libxml2-python-api.xml
@@ -124,10 +124,6 @@
-
- dump the memory allocated in the file .memdump
-
-
Get the namespace of a node
diff --git a/runxmlconf.c b/runxmlconf.c
index bee8bdba..18893039 100644
--- a/runxmlconf.c
+++ b/runxmlconf.c
@@ -415,7 +415,6 @@ xmlconfTestItem(xmlDocPtr doc, xmlNodePtr cur) {
test_log("test %s : %s leaked %d bytes\n",
id, filename, final - mem);
nb_leaks++;
- xmlMemDisplayLast(logfile, final - mem);
}
nb_tests++;
diff --git a/win32/configure.js b/win32/configure.js
index d40f32b6..a73cb598 100644
--- a/win32/configure.js
+++ b/win32/configure.js
@@ -44,7 +44,6 @@ var withIso8859x = false;
var withZlib = false;
var withLzma = false;
var withDebug = true;
-var withMemDebug = false;
var withSchemas = true;
var withSchematron = true;
var withRegExps = true;
@@ -128,7 +127,6 @@ function usage()
txt += " zlib: Enable zlib support (" + (withZlib? "yes" : "no") + ")\n";
txt += " lzma: Enable lzma support (" + (withLzma? "yes" : "no") + ")\n";
txt += " xml_debug: Enable XML debbugging module (" + (withDebug? "yes" : "no") + ")\n";
- txt += " mem_debug: Enable memory debugger (" + (withMemDebug? "yes" : "no") + ")\n";
txt += " regexps: Enable regular expressions (" + (withRegExps? "yes" : "no") + ")\n";
txt += " modules: Enable module support (" + (withModules? "yes" : "no") + ")\n";
txt += " tree: Enable tree api (" + (withTree? "yes" : "no") + ")\n";
@@ -223,7 +221,6 @@ function discoverVersion()
vf.WriteLine("WITH_ZLIB=" + (withZlib? "1" : "0"));
vf.WriteLine("WITH_LZMA=" + (withLzma? "1" : "0"));
vf.WriteLine("WITH_DEBUG=" + (withDebug? "1" : "0"));
- vf.WriteLine("WITH_MEM_DEBUG=" + (withMemDebug? "1" : "0"));
vf.WriteLine("WITH_SCHEMAS=" + (withSchemas? "1" : "0"));
vf.WriteLine("WITH_SCHEMATRON=" + (withSchematron? "1" : "0"));
vf.WriteLine("WITH_REGEXPS=" + (withRegExps? "1" : "0"));
@@ -327,8 +324,6 @@ function configureLibxml()
of.WriteLine(s.replace(/\@WITH_LZMA\@/, withLzma? "1" : "0"));
} else if (s.search(/\@WITH_DEBUG\@/) != -1) {
of.WriteLine(s.replace(/\@WITH_DEBUG\@/, withDebug? "1" : "0"));
- } else if (s.search(/\@WITH_MEM_DEBUG\@/) != -1) {
- of.WriteLine(s.replace(/\@WITH_MEM_DEBUG\@/, withMemDebug? "1" : "0"));
} else if (s.search(/\@WITH_SCHEMAS\@/) != -1) {
of.WriteLine(s.replace(/\@WITH_SCHEMAS\@/, withSchemas? "1" : "0"));
} else if (s.search(/\@WITH_SCHEMATRON\@/) != -1) {
@@ -478,8 +473,6 @@ for (i = 0; (i < WScript.Arguments.length) && (error == 0); i++) {
withLzma = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "xml_debug")
withDebug = strToBool(arg.substring(opt.length + 1, arg.length));
- else if (opt == "mem_debug")
- withMemDebug = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "schemas")
withSchemas = strToBool(arg.substring(opt.length + 1, arg.length));
else if (opt == "schematron")
@@ -656,7 +649,6 @@ txtOut += " iso8859x support: " + boolToStr(withIso8859x) + "\n";
txtOut += " zlib support: " + boolToStr(withZlib) + "\n";
txtOut += " lzma support: " + boolToStr(withLzma) + "\n";
txtOut += " Debugging module: " + boolToStr(withDebug) + "\n";
-txtOut += " Memory debugging: " + boolToStr(withMemDebug) + "\n";
txtOut += " Regexp support: " + boolToStr(withRegExps) + "\n";
txtOut += " Module support: " + boolToStr(withModules) + "\n";
txtOut += " Tree support: " + boolToStr(withTree) + "\n";
diff --git a/xmllint.c b/xmllint.c
index 6cfa0e5b..1bc119e0 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -2987,7 +2987,6 @@ static void showVersion(const char *name) {
if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(stderr, "Schematron ");
if (xmlHasFeature(XML_WITH_MODULES)) fprintf(stderr, "Modules ");
if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(stderr, "Debug ");
- if (xmlHasFeature(XML_WITH_DEBUG_MEM)) fprintf(stderr, "MemDebug ");
if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib ");
if (xmlHasFeature(XML_WITH_LZMA)) fprintf(stderr, "Lzma ");
fprintf(stderr, "\n");
diff --git a/xmlmemory.c b/xmlmemory.c
index b515f1cc..a850dfa0 100644
--- a/xmlmemory.c
+++ b/xmlmemory.c
@@ -12,18 +12,6 @@
#include
#include
-/**
- * MEM_LIST:
- *
- * keep track of all allocated blocks for error reporting
- * Always build the memory list !
- */
-#ifdef DEBUG_MEMORY_LOCATION
-#ifndef MEM_LIST
-#define MEM_LIST /* keep a list of all the allocated memory blocks */
-#endif
-#endif
-
#include
#include
#include
@@ -34,62 +22,31 @@
static unsigned long debugMemSize = 0;
static unsigned long debugMemBlocks = 0;
-static unsigned long debugMaxMemSize = 0;
static xmlMutex xmlMemMutex;
-void xmlMallocBreakpoint(void);
-
/************************************************************************
* *
* Macros, variables and associated types *
* *
************************************************************************/
-#if !defined(LIBXML_THREAD_ENABLED) && !defined(LIBXML_THREAD_ALLOC_ENABLED)
-#ifdef xmlMalloc
-#undef xmlMalloc
-#endif
-#ifdef xmlRealloc
-#undef xmlRealloc
-#endif
-#ifdef xmlMemStrdup
-#undef xmlMemStrdup
-#endif
-#endif
-
/*
* Each of the blocks allocated begin with a header containing information
*/
#define MEMTAG 0x5aa5U
-#define MALLOC_TYPE 1
-#define REALLOC_TYPE 2
-#define STRDUP_TYPE 3
-#define MALLOC_ATOMIC_TYPE 4
-#define REALLOC_ATOMIC_TYPE 5
-
typedef struct memnod {
unsigned int mh_tag;
- unsigned int mh_type;
- unsigned long mh_number;
size_t mh_size;
-#ifdef MEM_LIST
- struct memnod *mh_next;
- struct memnod *mh_prev;
-#endif
- const char *mh_file;
- unsigned int mh_line;
-} MEMHDR;
-
+} MEMHDR;
#ifdef SUN4
#define ALIGN_SIZE 16
#else
#define ALIGN_SIZE sizeof(double)
#endif
-#define HDR_SIZE sizeof(MEMHDR)
-#define RESERVE_SIZE (((HDR_SIZE + (ALIGN_SIZE-1)) \
+#define RESERVE_SIZE (((sizeof(MEMHDR) + ALIGN_SIZE - 1) \
/ ALIGN_SIZE ) * ALIGN_SIZE)
#define MAX_SIZE_T ((size_t)-1)
@@ -97,102 +54,21 @@ typedef struct memnod {
#define CLIENT_2_HDR(a) ((void *) (((char *) (a)) - RESERVE_SIZE))
#define HDR_2_CLIENT(a) ((void *) (((char *) (a)) + RESERVE_SIZE))
-
-static unsigned int block=0;
-static unsigned int xmlMemStopAtBlock = 0;
-static void *xmlMemTraceBlockAt = NULL;
-#ifdef MEM_LIST
-static MEMHDR *memlist = NULL;
-#endif
-
-static void debugmem_tag_error(void *addr);
-#ifdef MEM_LIST
-static void debugmem_list_add(MEMHDR *);
-static void debugmem_list_delete(MEMHDR *);
-#endif
-#define Mem_Tag_Err(a) debugmem_tag_error(a);
-
-#ifndef TEST_POINT
-#define TEST_POINT
-#endif
-
-/**
- * xmlMallocBreakpoint:
- *
- * Breakpoint to use in conjunction with xmlMemStopAtBlock. When the block
- * number reaches the specified value this function is called. One need to add a breakpoint
- * to it to get the context in which the given block is allocated.
- */
-
-void
-xmlMallocBreakpoint(void) {
- fprintf(stderr,
- "xmlMallocBreakpoint reached on block %d\n", xmlMemStopAtBlock);
-}
-
/**
* xmlMallocLoc:
* @size: an int specifying the size in byte to allocate.
* @file: the file name or NULL
* @line: the line number
*
- * a malloc() equivalent, with logging of the allocation info.
+ * DEPRECATED: don't use
*
* Returns a pointer to the allocated area or NULL in case of lack of memory.
*/
-
void *
-xmlMallocLoc(size_t size, const char * file, int line)
+xmlMallocLoc(size_t size, const char *file ATTRIBUTE_UNUSED,
+ int line ATTRIBUTE_UNUSED)
{
- MEMHDR *p;
- void *ret;
-
- xmlInitParser();
-
- TEST_POINT
-
- if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
- fprintf(stderr,
- "xmlMallocLoc : Unsigned overflow\n");
- return(NULL);
- }
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
-
- if (!p) {
- fprintf(stderr,
- "xmlMallocLoc : Out of free space\n");
- return(NULL);
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = MALLOC_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(&xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(&xmlMemMutex);
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- ret = HDR_2_CLIENT(p);
-
- if (xmlMemTraceBlockAt == ret) {
- fprintf(stderr,
- "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- return(ret);
+ return(xmlMemMalloc(size));
}
/**
@@ -201,64 +77,17 @@ xmlMallocLoc(size_t size, const char * file, int line)
* @file: the file name or NULL
* @line: the line number
*
- * a malloc() equivalent, with logging of the allocation info.
+ * DEPRECATED: don't use
*
* Returns a pointer to the allocated area or NULL in case of lack of memory.
*/
-
void *
-xmlMallocAtomicLoc(size_t size, const char * file, int line)
+xmlMallocAtomicLoc(size_t size, const char *file ATTRIBUTE_UNUSED,
+ int line ATTRIBUTE_UNUSED)
{
- MEMHDR *p;
- void *ret;
-
- xmlInitParser();
-
- TEST_POINT
-
- if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
- fprintf(stderr,
- "xmlMallocAtomicLoc : Unsigned overflow\n");
- return(NULL);
- }
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
-
- if (!p) {
- fprintf(stderr,
- "xmlMallocAtomicLoc : Out of free space\n");
- return(NULL);
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = MALLOC_ATOMIC_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(&xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(&xmlMemMutex);
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- ret = HDR_2_CLIENT(p);
-
- if (xmlMemTraceBlockAt == ret) {
- fprintf(stderr,
- "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- return(ret);
+ return(xmlMemMalloc(size));
}
+
/**
* xmlMemMalloc:
* @size: an int specifying the size in byte to allocate.
@@ -267,11 +96,32 @@ xmlMallocAtomicLoc(size_t size, const char * file, int line)
*
* Returns a pointer to the allocated area or NULL in case of lack of memory.
*/
-
void *
xmlMemMalloc(size_t size)
{
- return(xmlMallocLoc(size, "none", 0));
+ MEMHDR *p;
+
+ xmlInitParser();
+
+ if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
+ fprintf(stderr, "xmlMemMalloc: Unsigned overflow\n");
+ return(NULL);
+ }
+
+ p = (MEMHDR *) malloc(RESERVE_SIZE + size);
+ if (!p) {
+ fprintf(stderr, "xmlMemMalloc: Out of memory\n");
+ return(NULL);
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+
+ xmlMutexLock(&xmlMemMutex);
+ debugMemSize += size;
+ debugMemBlocks++;
+ xmlMutexUnlock(&xmlMemMutex);
+
+ return(HDR_2_CLIENT(p));
}
/**
@@ -281,79 +131,15 @@ xmlMemMalloc(size_t size)
* @file: the file name or NULL
* @line: the line number
*
- * a realloc() equivalent, with logging of the allocation info.
+ * DEPRECATED: don't use
*
* Returns a pointer to the allocated area or NULL in case of lack of memory.
*/
-
void *
-xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
+xmlReallocLoc(void *ptr, size_t size, const char *file ATTRIBUTE_UNUSED,
+ int line ATTRIBUTE_UNUSED)
{
- MEMHDR *p, *tmp;
- unsigned long number;
-
- if (ptr == NULL)
- return(xmlMallocLoc(size, file, line));
-
- xmlInitParser();
- TEST_POINT
-
- p = CLIENT_2_HDR(ptr);
- number = p->mh_number;
- if (xmlMemStopAtBlock == number) xmlMallocBreakpoint();
- if (p->mh_tag != MEMTAG) {
- Mem_Tag_Err(p);
- goto error;
- }
- p->mh_tag = ~MEMTAG;
- xmlMutexLock(&xmlMemMutex);
- debugMemSize -= p->mh_size;
- debugMemBlocks--;
-#ifdef MEM_LIST
- debugmem_list_delete(p);
-#endif
- xmlMutexUnlock(&xmlMemMutex);
-
- if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
- fprintf(stderr,
- "xmlReallocLoc : Unsigned overflow\n");
- return(NULL);
- }
-
- tmp = (MEMHDR *) realloc(p,RESERVE_SIZE+size);
- if (!tmp) {
- free(p);
- goto error;
- }
- p = tmp;
- if (xmlMemTraceBlockAt == ptr) {
- fprintf(stderr,
- "%p : Realloced(%lu -> %lu) Ok\n",
- xmlMemTraceBlockAt, (long unsigned)p->mh_size,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
- p->mh_tag = MEMTAG;
- p->mh_number = number;
- p->mh_type = REALLOC_TYPE;
- p->mh_size = size;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(&xmlMemMutex);
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(&xmlMemMutex);
-
- TEST_POINT
-
- return(HDR_2_CLIENT(p));
-
-error:
- return(NULL);
+ return(xmlMemRealloc(ptr, size));
}
/**
@@ -365,10 +151,45 @@ error:
*
* Returns a pointer to the allocated area or NULL in case of lack of memory.
*/
-
void *
-xmlMemRealloc(void *ptr,size_t size) {
- return(xmlReallocLoc(ptr, size, "none", 0));
+xmlMemRealloc(void *ptr, size_t size) {
+ MEMHDR *p, *tmp;
+ size_t oldSize;
+
+ if (ptr == NULL)
+ return(xmlMemMalloc(size));
+
+ xmlInitParser();
+
+ if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
+ fprintf(stderr, "xmlMemRealloc: Unsigned overflow\n");
+ return(NULL);
+ }
+
+ p = CLIENT_2_HDR(ptr);
+ if (p->mh_tag != MEMTAG) {
+ fprintf(stderr, "xmlMemRealloc: Tag error\n");
+ return(NULL);
+ }
+ oldSize = p->mh_size;
+ p->mh_tag = ~MEMTAG;
+
+ tmp = (MEMHDR *) realloc(p, RESERVE_SIZE + size);
+ if (!tmp) {
+ p->mh_tag = MEMTAG;
+ fprintf(stderr, "xmlMemRealloc: Out of memory\n");
+ return(NULL);
+ }
+ p = tmp;
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+
+ xmlMutexLock(&xmlMemMutex);
+ debugMemSize -= oldSize;
+ debugMemSize += size;
+ xmlMutexUnlock(&xmlMemMutex);
+
+ return(HDR_2_CLIENT(p));
}
/**
@@ -381,53 +202,30 @@ void
xmlMemFree(void *ptr)
{
MEMHDR *p;
- char *target;
if (ptr == NULL)
- return;
+ return;
if (ptr == (void *) -1) {
- fprintf(stderr,
- "trying to free pointer from freed area\n");
- goto error;
+ fprintf(stderr, "xmlMemFree: Pointer from freed area\n");
+ return;
}
- if (xmlMemTraceBlockAt == ptr) {
- fprintf(stderr,
- "%p : Freed()\n", xmlMemTraceBlockAt);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- target = (char *) ptr;
-
p = CLIENT_2_HDR(ptr);
if (p->mh_tag != MEMTAG) {
- Mem_Tag_Err(p);
- goto error;
+ fprintf(stderr, "xmlMemFree: Tag error\n");
+ return;
}
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
p->mh_tag = ~MEMTAG;
- memset(target, -1, p->mh_size);
+ memset(ptr, -1, p->mh_size);
+
xmlMutexLock(&xmlMemMutex);
debugMemSize -= p->mh_size;
debugMemBlocks--;
-#ifdef MEM_LIST
- debugmem_list_delete(p);
-#endif
xmlMutexUnlock(&xmlMemMutex);
free(p);
- TEST_POINT
-
- return;
-
-error:
- fprintf(stderr,
- "xmlMemFree(%p) error\n", ptr);
- xmlMallocBreakpoint();
return;
}
@@ -437,64 +235,15 @@ error:
* @file: the file name or NULL
* @line: the line number
*
- * a strdup() equivalent, with logging of the allocation info.
+ * DEPRECATED: don't use
*
* Returns a pointer to the new string or NULL if allocation error occurred.
*/
-
char *
-xmlMemStrdupLoc(const char *str, const char *file, int line)
+xmlMemStrdupLoc(const char *str, const char *file ATTRIBUTE_UNUSED,
+ int line ATTRIBUTE_UNUSED)
{
- char *s;
- size_t size = strlen(str) + 1;
- MEMHDR *p;
-
- xmlInitParser();
- TEST_POINT
-
- if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
- fprintf(stderr,
- "xmlMemStrdupLoc : Unsigned overflow\n");
- return(NULL);
- }
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
- if (!p) {
- goto error;
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = STRDUP_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(&xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(&xmlMemMutex);
-
- s = (char *) HDR_2_CLIENT(p);
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- strcpy(s,str);
-
- TEST_POINT
-
- if (xmlMemTraceBlockAt == s) {
- fprintf(stderr,
- "%p : Strdup() Ok\n", xmlMemTraceBlockAt);
- xmlMallocBreakpoint();
- }
-
- return(s);
-
-error:
- return(NULL);
+ return(xmlMemoryStrdup(str));
}
/**
@@ -505,10 +254,37 @@ error:
*
* Returns a pointer to the new string or NULL if allocation error occurred.
*/
-
char *
xmlMemoryStrdup(const char *str) {
- return(xmlMemStrdupLoc(str, "none", 0));
+ char *s;
+ size_t size = strlen(str) + 1;
+ MEMHDR *p;
+
+ xmlInitParser();
+
+ if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
+ fprintf(stderr, "xmlMemoryStrdup: Unsigned overflow\n");
+ return(NULL);
+ }
+
+ p = (MEMHDR *) malloc(RESERVE_SIZE + size);
+ if (!p) {
+ fprintf(stderr, "xmlMemoryStrdup: Out of memory\n");
+ return(NULL);
+ }
+ p->mh_tag = MEMTAG;
+ p->mh_size = size;
+
+ xmlMutexLock(&xmlMemMutex);
+ debugMemSize += size;
+ debugMemBlocks++;
+ xmlMutexUnlock(&xmlMemMutex);
+
+ s = (char *) HDR_2_CLIENT(p);
+
+ memcpy(s, str, size);
+
+ return(s);
}
/**
@@ -565,256 +341,47 @@ xmlMemBlocks(void) {
/**
* xmlMemDisplayLast:
- * @fp: a FILE descriptor used as the output file, if NULL, the result is
- * written to the file .memorylist
+ * @fp: a FILE descriptor
* @nbBytes: the amount of memory to dump
*
- * the last nbBytes of memory allocated and not freed, useful for dumping
- * the memory left allocated between two places at runtime.
+ * DEPRECATED: This feature was removed.
*/
-
void
-xmlMemDisplayLast(FILE *fp, long nbBytes)
+xmlMemDisplayLast(FILE *fp ATTRIBUTE_UNUSED, long nbBytes ATTRIBUTE_UNUSED)
{
-#ifdef MEM_LIST
- MEMHDR *p;
- unsigned idx;
- int nb = 0;
-#endif
- FILE *old_fp = fp;
-
- if (nbBytes <= 0)
- return;
-
- if (fp == NULL) {
- fp = fopen(".memorylist", "w");
- if (fp == NULL)
- return;
- }
-
-#ifdef MEM_LIST
- fprintf(fp," Last %li MEMORY ALLOCATED : %lu, MAX was %lu\n",
- nbBytes, debugMemSize, debugMaxMemSize);
- fprintf(fp,"BLOCK NUMBER SIZE TYPE\n");
- idx = 0;
- xmlMutexLock(&xmlMemMutex);
- p = memlist;
- while ((p) && (nbBytes > 0)) {
- fprintf(fp,"%-5u %6lu %6lu ",idx++,p->mh_number,
- (unsigned long)p->mh_size);
- 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 MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:
- fprintf(fp,"Unknown memory block, may be corrupted");
- xmlMutexUnlock(&xmlMemMutex);
- if (old_fp == NULL)
- fclose(fp);
- return;
- }
- if (p->mh_file != NULL) fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- nb++;
-
- fprintf(fp,"\n");
- nbBytes -= (unsigned long)p->mh_size;
- p = p->mh_next;
- }
- xmlMutexUnlock(&xmlMemMutex);
-#else
- fprintf(fp,"Memory list not compiled (MEM_LIST not defined !)\n");
-#endif
- if (old_fp == NULL)
- fclose(fp);
}
/**
* xmlMemDisplay:
- * @fp: a FILE descriptor used as the output file, if NULL, the result is
- * written to the file .memorylist
+ * @fp: a FILE descriptor
*
- * show in-extenso the memory blocks allocated
+ * DEPRECATED: This feature was removed.
*/
-
void
-xmlMemDisplay(FILE *fp)
+xmlMemDisplay(FILE *fp ATTRIBUTE_UNUSED)
{
-#ifdef MEM_LIST
- MEMHDR *p;
- unsigned idx;
- int nb = 0;
- time_t currentTime;
- char buf[500];
- struct tm * tstruct;
-#endif
- FILE *old_fp = fp;
-
- if (fp == NULL) {
- fp = fopen(".memorylist", "w");
- if (fp == NULL)
- return;
- }
-
-#ifdef MEM_LIST
- currentTime = time(NULL);
- tstruct = localtime(¤tTime);
- strftime(buf, sizeof(buf) - 1, "%I:%M:%S %p", tstruct);
- fprintf(fp," %s\n\n", buf);
-
-
- fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
- debugMemSize, debugMaxMemSize);
- fprintf(fp,"BLOCK NUMBER SIZE TYPE\n");
- idx = 0;
- xmlMutexLock(&xmlMemMutex);
- p = memlist;
- while (p) {
- fprintf(fp,"%-5u %6lu %6lu ",idx++,p->mh_number,
- (unsigned long)p->mh_size);
- 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 MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:
- fprintf(fp,"Unknown memory block, may be corrupted");
- xmlMutexUnlock(&xmlMemMutex);
- if (old_fp == NULL)
- fclose(fp);
- return;
- }
- if (p->mh_file != NULL) fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- nb++;
-
- fprintf(fp,"\n");
- p = p->mh_next;
- }
- xmlMutexUnlock(&xmlMemMutex);
-#else
- fprintf(fp,"Memory list not compiled (MEM_LIST not defined !)\n");
-#endif
- if (old_fp == NULL)
- fclose(fp);
}
-#ifdef MEM_LIST
-
-static void debugmem_list_add(MEMHDR *p)
-{
- p->mh_next = memlist;
- p->mh_prev = NULL;
- if (memlist) memlist->mh_prev = p;
- memlist = p;
-}
-
-static void debugmem_list_delete(MEMHDR *p)
-{
- if (p->mh_next)
- p->mh_next->mh_prev = p->mh_prev;
- if (p->mh_prev)
- p->mh_prev->mh_next = p->mh_next;
- else memlist = p->mh_next;
-}
-
-#endif
-
-/*
- * debugmem_tag_error:
- *
- * internal error function.
- */
-
-static void debugmem_tag_error(void *p)
-{
- fprintf(stderr,
- "Memory tag error occurs :%p \n\t bye\n", p);
-#ifdef MEM_LIST
- if (stderr)
- xmlMemDisplay(stderr);
-#endif
-}
-
-#ifdef MEM_LIST
-static FILE *xmlMemoryDumpFile = NULL;
-#endif
-
/**
* xmlMemShow:
- * @fp: a FILE descriptor used as the output file
+ * @fp: a FILE descriptor
* @nr: number of entries to dump
*
- * show a show display of the memory allocated, and dump
- * the @nr last allocated areas which were not freed
+ * DEPRECATED: This feature was removed.
*/
-
void
-xmlMemShow(FILE *fp, int nr ATTRIBUTE_UNUSED)
+xmlMemShow(FILE *fp ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED)
{
-#ifdef MEM_LIST
- MEMHDR *p;
-#endif
-
- if (fp != NULL)
- fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
- debugMemSize, debugMaxMemSize);
-#ifdef MEM_LIST
- xmlMutexLock(&xmlMemMutex);
- if (nr > 0) {
- fprintf(fp,"NUMBER SIZE TYPE WHERE\n");
- p = memlist;
- while ((p) && nr > 0) {
- fprintf(fp,"%6lu %6lu ",p->mh_number,(unsigned long)p->mh_size);
- switch (p->mh_type) {
- case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
- case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
- case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:fprintf(fp," ??? in ");break;
- }
- if (p->mh_file != NULL)
- fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- fprintf(fp,"\n");
- nr--;
- p = p->mh_next;
- }
- }
- xmlMutexUnlock(&xmlMemMutex);
-#endif /* MEM_LIST */
}
/**
* xmlMemoryDump:
*
- * Dump in-extenso the memory blocks allocated to the file .memorylist
+ * DEPRECATED: This feature was removed.
*/
-
void
xmlMemoryDump(void)
{
-#ifdef MEM_LIST
- FILE *dump;
-
- if (debugMaxMemSize == 0)
- return;
- dump = fopen(".memdump", "w");
- if (dump == NULL)
- xmlMemoryDumpFile = stderr;
- else xmlMemoryDumpFile = dump;
-
- xmlMemDisplay(xmlMemoryDumpFile);
-
- if (dump != NULL) fclose(dump);
-#endif /* MEM_LIST */
}
@@ -844,18 +411,7 @@ xmlInitMemory(void) {
*/
void
xmlInitMemoryInternal(void) {
- char *breakpoint;
- xmlInitMutex(&xmlMemMutex);
-
- breakpoint = getenv("XML_MEM_BREAKPOINT");
- if (breakpoint != NULL) {
- sscanf(breakpoint, "%ud", &xmlMemStopAtBlock);
- }
- breakpoint = getenv("XML_MEM_TRACE");
- if (breakpoint != NULL) {
- sscanf(breakpoint, "%p", &xmlMemTraceBlockAt);
- }
-
+ xmlInitMutex(&xmlMemMutex);
}
/**