Skip to content

Fix leaking sockets (and ResourceWarnings)#291

Open
CristiFati wants to merge 2 commits into
python-xlib:masterfrom
CristiFati:fix/leaking-sockets-cfati
Open

Fix leaking sockets (and ResourceWarnings)#291
CristiFati wants to merge 2 commits into
python-xlib:masterfrom
CristiFati:fix/leaking-sockets-cfati

Conversation

@CristiFati

Copy link
Copy Markdown

After socket creation, if connecting fails the created socket is leaked (remains opened until at a later point when will be garbage collected).
In some cases the problem becomes visible in the form of ResourceWarning(s) that pop out of the blue.

Encountered it when running tests on CristiFati/pycfutils (which doesn't use python-xlib), plus the perfect storm:

  1. Linux OS
  2. No XServer running
  3. DISPLAY set
  4. Python with python-xlib installed
(py_pc064_03.10_test0) [cfati@cfati-5510-0:/mnt/e/Work/Dev/Repos/GitHub/CristiFati/pycfutils/src]> DISPLAY=":69" python -m unittest discover pycfutils/tests
...s.........Path does not exist
Path does not exist
proc_raise_ni
flt_proc_raise_ni
MiscellaneousTestCase.test_process_items_in_path.<locals>.flt_trav_raise_ni_noarg() takes 1 positional argument but 2 were given
flt_trav_raise_ni
proc_raise_ni_kwarg
Callable has no parameter named 'notexisting'
Callable path argument index out of range
Callable path argument target must be str, int, or None
No valid argument found for path
MiscellaneousTestCase.test_process_items_in_path.<locals>.proc_args() missing 1 required positional argument: 'file_list'
proc_args
proc_args
........<frozen importlib._bootstrap>:188: ResourceWarning: unclosed <socket.socket fd=5, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>
ResourceWarning: Enable tracemalloc to get the object allocation traceback
<frozen importlib._bootstrap>:188: ResourceWarning: unclosed <socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 44024)>
ResourceWarning: Enable tracemalloc to get the object allocation traceback
<frozen importlib._bootstrap>:188: ResourceWarning: unclosed <socket.socket fd=7, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0>
ResourceWarning: Enable tracemalloc to get the object allocation traceback
<frozen importlib._bootstrap>:188: ResourceWarning: unclosed <socket.socket fd=8, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 44028)>
ResourceWarning: Enable tracemalloc to get the object allocation traceback
.......
----------------------------------------------------------------------
Ran 28 tests in 15.834s

OK (skipped=1)
  • One of the test files is loaded (as a side effect). That file has an import pynput statement at module level, which triggers an XServer probe (a call to get_socket). On python with no python-xlib installed the file would simply and silently fail to import - the problem not hit
  • Another test file (that happened to run after the previous one) spawn processes (via multiprocessing) and the warning is issued

I eventually worked around the issue: CristiFati/pycfutils@e9eccf0, but still it has to be fixed as it might have unpredictable consequences.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant