Descriptor leak in python 2.4 subprocess module

Michel Lespinasse walken at zoy.org
Thu Aug 28 11:09:29 CEST 2008


Hi,

I hit an issue with the following python code:

    try:
        get_orient = subprocess.Popen (['jpegexiforient', '-n', pathfull],
                                       stdin = subprocess.PIPE,
                                       stdout = subprocess.PIPE)
        orient = get_orient.communicate ()[0]
    except:
        orient = None

The intent of this was to read the exif orientation of a picture, or just
use None if jpegexiforient can not run.

The application worked fine on my devel machine but I noticed that on a
different host, it crashed due to running out of file descriptors.
After investigation I found out that the above code was responsible,
leaking two file descriptors per invocation if jpegexiforient is not
installed on the host.

I don't see any way to fix it in my code either, since get_orient is not
defined in the exception path, there is no way I can close its file
descriptors myself. I believe this is a bug in the subprocess module,
it should make sure to clean up after itself when getting out on the
exception path.

This is with python 2.4.4 on linux (debian etch distribution).

Hope this helps. I would prefer to be copied in any replies as I'm not
on the list (I will notice the replies after a while either way, but
it'll be faster if you can copy me).

Cheers,

-- 
Michel "Walken" Lespinasse
A program is never fully debugged until the last user dies.



More information about the Python-list mailing list