Issue 2840: Expat parser locks XML source file if ContentHandler raises an exception (original) (raw)

This was observed in Python 2.5.2 on Windows XP. Run this code in IDLE:

import xml.sax from xml.sax.handler import ContentHandler class C(ContentHandler): def startElement(self, name, attrs): assert False

xml.sax.parse(xml_path, C())

Where "xml_path" points to a well-formed XML file. This will raise an AssertionError. Then, attempt to modify or delete the XML file that was specified; it's still locked by the Python process.

Deleting the ContentHandler does not unlock it. There doesn't seem any way to unlock it aside from terminating the Python process.

If the ContentHandler doesn't raise an exception or error, the file is unlocked properly.