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."
|