New submission from tholzer: The NamedTemporaryFile inside the standard tempfile library leaks an open file descriptor when fdopen fails.
Test case: # ulimit -SHn 50 # python test1.py from tempfile import NamedTemporaryFile while 1: try: NamedTemporaryFile(mode='x') except ValueError as ex: pass Output: Traceback (most recent call last): File "./a2.py", line 7, in <module> File "/usr/lib/python2.7/tempfile.py", line 454, in NamedTemporaryFile File "/usr/lib/python2.7/tempfile.py", line 235, in _mkstemp_inner OSError: [Errno 24] Too many open files: '/tmp/tmpI0MIEW' Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook ImportError: No module named fileutils Original exception was: Traceback (most recent call last): File "./a2.py", line 7, in <module> File "/usr/lib/python2.7/tempfile.py", line 454, in NamedTemporaryFile File "/usr/lib/python2.7/tempfile.py", line 235, in _mkstemp_inner OSError: [Errno 24] Too many open files: '/tmp/tmpI0MIEW' Patch: @@ -452,7 +452,11 @@ flags |= _os.O_TEMPORARY (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) - file = _os.fdopen(fd, mode, bufsize) + try: + file = _os.fdopen(fd, mode, bufsize) + except Exception as ex: + _os.close(fd) + raise return _TemporaryFileWrapper(file, name, delete) if _os.name != 'posix' or _os.sys.platform == 'cygwin': ---------- components: Library (Lib) messages: 214778 nosy: tholzer priority: normal severity: normal status: open title: tempfile.NamedTemporaryFile leaks file descriptor when fdopen fails type: resource usage versions: Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21058> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com