[Lxml-checkins] r33706 - in lxml/trunk: . src/lxml

scoder at codespeak.net scoder at codespeak.net
Wed Oct 25 09:48:33 CEST 2006


Author: scoder
Date: Wed Oct 25 09:48:30 2006
New Revision: 33706

Modified:
   lxml/trunk/CHANGES.txt
   lxml/trunk/src/lxml/docloader.pxi
   lxml/trunk/src/lxml/parser.pxi
   lxml/trunk/src/lxml/xslt.pxi
Log:
clear resolver context after use

Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt	(original)
+++ lxml/trunk/CHANGES.txt	Wed Oct 25 09:48:30 2006
@@ -18,6 +18,9 @@
 Bugs fixed
 ----------
 
+* Open files and XML strings returned by Python resolvers were not
+  closed/freed
+
 * Copying Comments and ProcessingInstructions failed
 
 * Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()

Modified: lxml/trunk/src/lxml/docloader.pxi
==============================================================================
--- lxml/trunk/src/lxml/docloader.pxi	(original)
+++ lxml/trunk/src/lxml/docloader.pxi	Wed Oct 25 09:48:30 2006
@@ -98,3 +98,7 @@
         _ExceptionContext.__init__(self)
         self._resolvers = resolvers
         self._storage = _TempStore()
+
+    cdef void clear(self):
+        _ExceptionContext.clear(self)
+        self._storage.clear()

Modified: lxml/trunk/src/lxml/parser.pxi
==============================================================================
--- lxml/trunk/src/lxml/parser.pxi	(original)
+++ lxml/trunk/src/lxml/parser.pxi	Wed Oct 25 09:48:30 2006
@@ -461,6 +461,7 @@
             recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
             return _handleParseResult(pctxt, result, None, recover)
         finally:
+            self._context.clear()
             self._error_log.disconnect()
             self._unlockParser()
 
@@ -492,6 +493,7 @@
             recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
             return _handleParseResult(pctxt, result, None, recover)
         finally:
+            self._context.clear()
             self._error_log.disconnect()
             self._unlockParser()
 
@@ -519,6 +521,7 @@
             recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
             return _handleParseResult(pctxt, result, c_filename, recover)
         finally:
+            self._context.clear()
             self._error_log.disconnect()
             self._unlockParser()
 
@@ -542,6 +545,7 @@
             recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
             return _handleParseResult(pctxt, result, filename, recover)
         finally:
+            self._context.clear()
             self._error_log.disconnect()
             self._unlockParser()
 

Modified: lxml/trunk/src/lxml/xslt.pxi
==============================================================================
--- lxml/trunk/src/lxml/xslt.pxi	(original)
+++ lxml/trunk/src/lxml/xslt.pxi	Wed Oct 25 09:48:30 2006
@@ -425,23 +425,26 @@
         _destroyFakeDoc(input_doc._c_doc, c_doc)
 
         self._error_log.disconnect()
-        if self._xslt_resolver_context._has_raised():
-            if c_result is not NULL:
-                tree.xmlFreeDoc(c_result)
-            self._xslt_resolver_context._raise_if_stored()
-
-        if c_result is NULL:
-            error = self._error_log.last_error
-            if error is not None and error.message:
-                if error.line >= 0:
-                    message = "%s, line %d" % (error.message, error.line)
+        try:
+            if self._xslt_resolver_context._has_raised():
+                if c_result is not NULL:
+                    tree.xmlFreeDoc(c_result)
+                self._xslt_resolver_context._raise_if_stored()
+
+            if c_result is NULL:
+                error = self._error_log.last_error
+                if error is not None and error.message:
+                    if error.line >= 0:
+                        message = "%s, line %d" % (error.message, error.line)
+                    else:
+                        message = error.message
+                elif error.line >= 0:
+                    message = "Error applying stylesheet, line %d" % error.line
                 else:
-                    message = error.message
-            elif error.line >= 0:
-                message = "Error applying stylesheet, line %d" % error.line
-            else:
-                message = "Error applying stylesheet"
-            raise XSLTApplyError, message
+                    message = "Error applying stylesheet"
+                raise XSLTApplyError, message
+        finally:
+            self._xslt_resolver_context.clear()
 
         result_doc = _documentFactory(c_result, input_doc._parser)
         return _xsltResultTreeFactory(result_doc, self, profile_doc)


More information about the lxml-checkins mailing list