◐ Shell
clean mode source ↗

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