gh-103092: Isolate socket by erlend-aasland · Pull Request #103094 · python/cpython
There's some leaks that needs to be adressed:
$ ./python.exe measure.py before=46451, after=47809 before=47811, after=48549 before=48549, after=49287 before=49287, after=50025 before=50025, after=50763
measure.py
import gc import sys for _ in range(5): gc.collect() before = sys.gettotalrefcount() import _socket del sys.modules["_socket"] del _socket gc.collect() after = sys.gettotalrefcount() print(f"{before=}, {after=}") # assert after == before
... and these two:
$ ./python.exe -m test -R : test_socket -m RecvmsgIntoSCMRightsStreamTest Raised RLIMIT_NOFILE: 256 -> 1024 0:00:00 load avg: 1.96 Run tests sequentially 0:00:00 load avg: 1.96 [1/1] test_socket beginning 9 repetitions 123456789 ......... test_socket leaked [10, 10, 10, 10] file descriptors, sum=40 test_socket failed (reference leak) == Tests result: FAILURE == 1 test failed: test_socket Total duration: 1.8 sec Tests result: FAILURE $ ./python.exe -m test -R : test_socket -m RecvmsgSCMRightsStreamTest Raised RLIMIT_NOFILE: 256 -> 1024 0:00:00 load avg: 2.52 Run tests sequentially 0:00:00 load avg: 2.52 [1/1] test_socket beginning 9 repetitions 123456789 ......... test_socket leaked [10, 10, 10, 10] file descriptors, sum=40 test_socket failed (reference leak) == Tests result: FAILURE == 1 test failed: test_socket Total duration: 1.8 sec Tests result: FAILURE