logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

r28613 - lxml/trunk/src/lxml: msg#00136

Subject: r28613 - lxml/trunk/src/lxml
Author: scoder
Date: Sat Jun 10 11:23:33 2006
New Revision: 28613

Modified:
   lxml/trunk/src/lxml/relaxng.pxi
   lxml/trunk/src/lxml/xmlschema.pxi
Log:
allow threads during validation in RelaxNG and XMLSchema (untested)

Modified: lxml/trunk/src/lxml/relaxng.pxi
==============================================================================
--- lxml/trunk/src/lxml/relaxng.pxi     (original)
+++ lxml/trunk/src/lxml/relaxng.pxi     Sat Jun 10 11:23:33 2006
@@ -71,6 +71,7 @@
         """Validate doc using Relax NG.
 
         Returns true if document is valid, false if not."""
+        cdef python.PyThreadState* state
         cdef _Document doc
         cdef _NodeBase root_node
         cdef xmlDoc* c_doc
@@ -82,12 +83,20 @@
 
         self._error_log.connect()
         valid_ctxt = relaxng.xmlRelaxNGNewValidCtxt(self._c_schema)
+        if valid_ctxt is NULL:
+            self._error_log.disconnect()
+            raise RelaxNGError, "Failed to create validation context"
+
+        state = python.PyEval_SaveThread()
 
         c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)
         ret = relaxng.xmlRelaxNGValidateDoc(valid_ctxt, c_doc)
         _destroyFakeDoc(doc._c_doc, c_doc)
 
         relaxng.xmlRelaxNGFreeValidCtxt(valid_ctxt)
+
+        python.PyEval_RestoreThread(state)
+
         self._error_log.disconnect()
         if ret == -1:
             raise RelaxNGValidateError, "Internal error in Relax NG validation"

Modified: lxml/trunk/src/lxml/xmlschema.pxi
==============================================================================
--- lxml/trunk/src/lxml/xmlschema.pxi   (original)
+++ lxml/trunk/src/lxml/xmlschema.pxi   Sat Jun 10 11:23:33 2006
@@ -66,6 +66,7 @@
 
         Returns true if document is valid, false if not.
         """
+        cdef python.PyThreadState* state
         cdef xmlschema.xmlSchemaValidCtxt* valid_ctxt
         cdef _Document doc
         cdef _NodeBase root_node
@@ -77,12 +78,20 @@
 
         self._error_log.connect()
         valid_ctxt = xmlschema.xmlSchemaNewValidCtxt(self._c_schema)
+        if valid_ctxt is NULL:
+            self._error_log.disconnect()
+            raise XMLSchemaError, "Failed to create validation context"
+
+        state = python.PyEval_SaveThread()
 
         c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node)
         ret = xmlschema.xmlSchemaValidateDoc(valid_ctxt, c_doc)
         _destroyFakeDoc(doc._c_doc, c_doc)
 
         xmlschema.xmlSchemaFreeValidCtxt(valid_ctxt)
+
+        python.PyEval_RestoreThread(state)
+
         self._error_log.disconnect()
         if ret == -1:
             raise XMLSchemaValidateError, "Internal error in XML Schema 
validation."


<Prev in Thread] Current Thread [Next in Thread>