try to fix a problem with valgrind. applied memory leak fix from Brent

* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am
  xstc/Makefile.am: try to fix a problem with valgrind.
* python/generator.py python/libxml.c python/tests/Makefile.am
  python/tests/tstmem.py: applied memory leak fix from Brent Hendricks
  c.f. bug #165349
Daniel
diff --git a/ChangeLog b/ChangeLog
index e0d9228..02c45c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Wed Mar  2 11:45:18 CET 2005 Daniel Veillard <daniel@veillard.com>
+
+	* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am
+	  xstc/Makefile.am: try to fix a problem with valgrind.
+	* python/generator.py python/libxml.c python/tests/Makefile.am
+	  python/tests/tstmem.py: applied memory leak fix from Brent Hendricks
+	  c.f. bug #165349
+
 Mon Feb 28 11:18:24 CET 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
 
 	* tree.c: Changed xmlSearchNsByHref to call xmlNsInScope with
diff --git a/Makefile.am b/Makefile.am
index a745e0b..c857b62 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -156,7 +156,7 @@
 valgrind:
 	@echo '## Running the regression tests under Valgrind'
 	@echo '## Go get a cup of coffee it is gonna take a while ...'
-	$(MAKE) CHECKER='valgrind -q' tests
+	$(MAKE) CHECKER='valgrind' tests
 
 APItests: testapi$(EXEEXT)
 	@echo "## Running the API regression tests this may take a little while"
diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am
index a3ef18f..97edc55 100644
--- a/doc/examples/Makefile.am
+++ b/doc/examples/Makefile.am
@@ -95,7 +95,7 @@
 reader3_LDADD= @RDL_LIBS@ $(LDADDS)
 
 valgrind: 
-	$(MAKE) CHECKER='valgrind -q' tests
+	$(MAKE) CHECKER='valgrind' tests
 
 tests: $(noinst_PROGRAMS)
 	@(echo '## examples regression tests')
diff --git a/doc/examples/index.py b/doc/examples/index.py
index db41165..11df6f0 100755
--- a/doc/examples/index.py
+++ b/doc/examples/index.py
@@ -249,7 +249,7 @@
     for example in examples:
         Makefile = Makefile + "%s_SOURCES=%s.c\n%s_LDFLAGS=\n%s_DEPENDENCIES= $(DEPS)\n%s_LDADD= @RDL_LIBS@ $(LDADDS)\n\n" % (example, example, example,
 	       example, example)
-    Makefile = Makefile + "valgrind: \n\t$(MAKE) CHECKER='valgrind -q' tests\n\n"
+    Makefile = Makefile + "valgrind: \n\t$(MAKE) CHECKER='valgrind' tests\n\n"
     Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n"
     Makefile = Makefile + "\t@(echo '## examples regression tests')\n"
     Makefile = Makefile + "\t@(echo > .memdump)\n"
diff --git a/python/generator.py b/python/generator.py
index f2c7939..8add0a9 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -344,6 +344,8 @@
     # the next function is defined in libxml.c
     if name == "xmlRelaxNGFreeValidCtxt":
         return 1
+    if name == "xmlFreeValidCtxt":
+        return 1
 #
 # Those are skipped because the Const version is used of the bindings
 # instead.
diff --git a/python/libxml.c b/python/libxml.c
index ae1a0f4..b520994 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -1858,6 +1858,31 @@
     return (py_retval);
 }
 
+
+PyObject *
+libxml_xmlFreeValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlValidCtxtPtr cur;
+    xmlValidCtxtPyCtxtPtr pyCtxt;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeValidCtxt", &pyobj_cur))
+        return(NULL);
+    cur = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_cur);
+
+    pyCtxt = (xmlValidCtxtPyCtxtPtr)(cur->userData);
+    if (pyCtxt != NULL)
+    {
+            Py_XDECREF(pyCtxt->error);
+            Py_XDECREF(pyCtxt->warn);
+            Py_XDECREF(pyCtxt->arg);
+            xmlFree(pyCtxt);
+    }
+
+    xmlFreeValidCtxt(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
 /************************************************************************
  *									*
  *                      Per xmlTextReader error handler                 *
@@ -3618,6 +3643,7 @@
     {(char *) "doc", libxml_doc, METH_VARARGS, NULL},
     {(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
     {(char *)"xmlSetValidErrors", libxml_xmlSetValidErrors, METH_VARARGS, NULL},
+    {(char *)"xmlFreeValidCtxt", libxml_xmlFreeValidCtxt, METH_VARARGS, NULL},
 #ifdef LIBXML_OUTPUT_ENABLED
     {(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
     {(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
diff --git a/python/tests/Makefile.am b/python/tests/Makefile.am
index 3fb2959..23f031e 100644
--- a/python/tests/Makefile.am
+++ b/python/tests/Makefile.am
@@ -37,7 +37,8 @@
     sync.py \
     tstLastError.py \
     indexes.py \
-    dtdvalid.py
+    dtdvalid.py \
+    tstmem.py
 
 XMLS=		\
     tst.xml	\
diff --git a/python/tests/tstmem.py b/python/tests/tstmem.py
new file mode 100755
index 0000000..553096d
--- /dev/null
+++ b/python/tests/tstmem.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python -u
+import libxml2
+import libxml2mod
+import sys
+
+def error(msg, data):
+    pass
+
+# Memory debug specific
+libxml2.debugMemory(1)
+
+dtd="""<!ELEMENT foo EMPTY>"""
+instance="""<?xml version="1.0"?>
+<foo></foo>"""
+
+dtd = libxml2.parseDTD(None, 'test.dtd')
+ctxt = libxml2.newValidCtxt()
+libxml2mod.xmlSetValidErrors(ctxt._o, error, error)
+doc = libxml2.parseDoc(instance)
+ret = doc.validateDtd(ctxt, dtd)
+if ret != 1:
+    print "error doing DTD validation"
+    sys.exit(1)
+
+doc.freeDoc()
+dtd.freeDtd()
+del dtd
+del ctxt
+
+# Memory debug specific
+libxml2.cleanupParser()
+if libxml2.debugMemory(1) == 0:
+    print "OK"
+else:
+    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    libxml2.dumpMemory()
diff --git a/xstc/Makefile.am b/xstc/Makefile.am
index 82de1ef..e7e128b 100644
--- a/xstc/Makefile.am
+++ b/xstc/Makefile.am
@@ -94,7 +94,7 @@
 valgrind:
 	-@(if [ -x $(PYTHON) ] ; then 					\
 	   echo '## Running the regression tests under Valgrind' ;	\
-	   $(MAKE) CHECKER='valgrind -q' MAKEFLAGS+=--silent pytests ; fi);
+	   $(MAKE) CHECKER='valgrind' MAKEFLAGS+=--silent pytests ; fi);
 
 clean:
 	rm -f $(PYSCRIPTS) test.log