[Pytest-commit] Issue #492: File descriptor leakage (hpk42/pytest)

Marc Abramowitz issues-reply at bitbucket.org
Fri Mar 28 18:16:15 CET 2014


New issue 492: File descriptor leakage
https://bitbucket.org/hpk42/pytest/issue/492/file-descriptor-leakage

Marc Abramowitz:

I am periodically seeing failures due to file descriptor leakage in both builds on Drone.io (e.g.: https://drone.io/bitbucket.org/msabramo/pytest/6) and locally using `tox`:

>From https://drone.io/bitbucket.org/msabramo/pytest/6:

```
==================================== ERRORS ====================================
 ERROR at teardown of TestStdCaptureFD.test_capturing_readouterr_decode_error_handling 

item = <Function 'test_capturing_readouterr_decode_error_handling'>
__multicall__ = <MultiCall 0 results, 0 meths, kwargs={'nextitem': <Function 'test_reset_twice_error'>, 'item': <Function 'test_capturing_readouterr_decode_error_handling'>}>

    def pytest_runtest_teardown(item, __multicall__):
        item.config._basedir.chdir()
        if hasattr(item.config, '_numfiles'):
            x = __multicall__.execute()
>           check_open_files(item.config)

conftest.py:50: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x7f9230096290>

    def check_open_files(config):
        out2 = py.process.cmdexec("lsof -p %d" % pid)
        lines2 = getopenfiles(out2)
        if len(lines2) > config._numfiles + 3:
            error = []
            error.append("***** %s FD leackage detected" %
        (len(lines2)-config._numfiles))
            error.extend(lines2)
            error.append(error[0])
            # update numfile so that the overall test run continuess
            config._numfiles = len(lines2)
>           raise AssertionError("\n".join(error))
E           AssertionError: ***** 4 FD leackage detected
E           py.test 1283 ubuntu    0r   CHR    1,3      0t0  1445164 /dev/null
E           py.test 1283 ubuntu    8r   REG  253,0        3     3929 /tmp/pytest-0/testdir/test_writeorg0/test_writeorg.py
E           py.test 1283 ubuntu    9r   CHR    1,3      0t0  1445164 /dev/null
E           py.test 1283 ubuntu   11r   CHR    1,3      0t0  1445164 /dev/null
E           ***** 4 FD leackage detected

conftest.py:44: AssertionError
```

>From a local `tox` run:

```
==================================================================================== ERRORS ====================================================================================
_______________________________________________________ ERROR at teardown of TestStdCaptureFD.test_capturing_done_simple _______________________________________________________

item = <Function 'test_capturing_done_simple'>
__multicall__ = <MultiCall 0 results, 0 meths, kwargs={'item': <Function 'test_capturing_done_simple'>, 'nextitem': <Function 'test_capturing_reset_simple'>}>

    def pytest_runtest_teardown(item, __multicall__):
        item.config._basedir.chdir()
        if hasattr(item.config, '_numfiles'):
            x = __multicall__.execute()
>           check_open_files(item.config)

conftest.py:50:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

config = <_pytest.config.Config object at 0x1013c4350>

    def check_open_files(config):
        out2 = py.process.cmdexec("lsof -p %d" % pid)
        lines2 = getopenfiles(out2)
        if len(lines2) > config._numfiles + 3:
            error = []
            error.append("***** %s FD leackage detected" %
        (len(lines2)-config._numfiles))
            error.extend(lines2)
            error.append(error[0])
            # update numfile so that the overall test run continuess
            config._numfiles = len(lines2)
>           raise AssertionError("\n".join(error))
E           AssertionError: ***** 4 FD leackage detected
E           python3.3 99001 marca    0r    CHR                3,2        0t0      305 /dev/null
E           python3.3 99001 marca    1u    REG                1,2          0 29288704 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmpn1zy1r
E           python3.3 99001 marca    2u    REG                1,2          0 29288705 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmp1ho8lz
E           python3.3 99001 marca    3w    REG                1,2       3681 29266158 /Users/marca/dev/hg-repos/pytest/.tox/py26/log/py26-0.log
E           python3.3 99001 marca    6w    REG                1,2       3819 29276170 /Users/marca/dev/hg-repos/pytest/.tox/py27/log/py27-0.log
E           python3.3 99001 marca    7w    REG                1,2       3841 29286174 /Users/marca/dev/hg-repos/pytest/.tox/py33/log/py33-0.log
E           python3.3 99001 marca    8u    CHR               16,3 0t11092970      811 /dev/ttys003
E           python3.3 99001 marca    9u    REG                1,2          0 29288704 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmpn1zy1r
E           python3.3 99001 marca   10u    REG                1,2          0 29288705 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmp1ho8lz
E           python3.3 99001 marca   11u    CHR               16,3 0t11092970      811 /dev/ttys003
E           python3.3 99001 marca   12u    CHR               16,3 0t11092970      811 /dev/ttys003
E           python3.3 99001 marca   13u    REG                1,2          3 29290273 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/pytest-205/testdir/test_writeorg0/test_writeorg.py
E           python3.3 99001 marca   14r    CHR                3,2        0t0      305 /dev/null
E           python3.3 99001 marca   15u    REG                1,2          0 29288704 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmpn1zy1r
E           python3.3 99001 marca   17u    REG                1,2          0 29288705 /private/var/folders/gw/w0clrs515zx9x_55zgtpv4mm0000gp/T/tmp1ho8lz
E           ***** 4 FD leackage detected

conftest.py:44: AssertionError
```




More information about the pytest-commit mailing list