This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: SAX parse (ExpatParser) leaks file handle when given filename input
Type: resource usage Stage: resolved
Components: XML Versions: Python 2.7
Status: closed Resolution: out of date
Dependencies: Superseder:
Assigned To: Nosy List: berker.peksag, christian.heimes, mth, scoder, serhiy.storchaka, xtreak
Priority: normal Keywords:

Created on 2012-07-18 14:17 by mth, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (4)
msg165779 - (view) Author: Matt Hillsdon (mth) Date: 2012-07-18 14:17
The following example uses make_parser / parse to read a trivial XML document by filename and then attempts to delete the file.  On Win32 I can't unlink the file because the parse does not seem to close the file handle.

import os
import tempfile
from xml.sax import make_parser, ContentHandler

(handle, path) = tempfile.mkstemp()
os.write(handle, b"<foo/>")

parser = make_parser()

# This unlink fails on win32.  It succeeds if I comment out the call to parse.

As I provide a filename rather than a file object, I would expect the parse call to both open and close it.  I can't see a way to do the clean-up myself.

This issue exists in Python 2.7.3 but I could not reproduce it in 3.2.3.

Windows cmd transcript:

Traceback (most recent call last):
  File "", line 14, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'c:\\d\\tmpvyqg2c'


msg222974 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-07-13 21:20
@Matt I'm sorry that we haven't got back to you on this.
msg341008 - (view) Author: Karthikeyan Singaravelan (xtreak) * (Python committer) Date: 2019-04-27 19:09
Is this fixed with d81f9e24ea89c0aaded1e0d3f8d8076bbd58c19a ?
msg341015 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2019-04-27 23:59
I just tested the snippet in msg165779 under Windows with Python 2.7.16. I didn't get WindowsError after I called os.unlink(path) and verified that path is removed from the file system.

I think we can close this issue as 'out of date'.
Date User Action Args
2022-04-11 14:57:33adminsetgithub: 59593
2019-04-27 23:59:41berker.peksagsetstatus: open -> closed

nosy: + berker.peksag
messages: + msg341015

resolution: out of date
stage: resolved
2019-04-27 19:09:25xtreaksetnosy: + xtreak, serhiy.storchaka, scoder
messages: + msg341008
2019-04-26 19:14:12BreamoreBoysetnosy: - BreamoreBoy
2014-07-13 21:20:59BreamoreBoysetnosy: + christian.heimes, BreamoreBoy
messages: + msg222974
2013-02-05 20:06:25serhiy.storchakalinkissue2840 superseder
2012-07-18 14:17:29mthcreate