[prev in list] [next in list] [prev in thread] [next in thread]
List: python-bugs-list
Subject: [issue36750] test_socket leaks file descriptors on macOS
From: Karthikeyan Singaravelan <report () bugs ! python ! org>
Date: 2019-04-30 5:59:32
Message-ID: 1556603972.78.0.233813064563.issue36750 () roundup ! psfhosted ! org
[Download RAW message or body]
Karthikeyan Singaravelan <tir.karthi@gmail.com> added the comment:
The test failure is reproducible on the PR 12271 merging master branch on Ubuntu with \
-R 3:3 test_socket. Sorry, I tried it initially on master thinking it was a master \
branch problem. I don't see C related code in the PR. There was a merge commit [0] \
after which the failure is consistently reproducible. I tried reverting parts of the \
PR to narrow down the failure and happened to come across the below statement in the \
diff where the test object and elapsed test for time are stored to be printed later. \
Commenting out the call makes tests pass for test_socket and much more baffling is \
that changing the code to use list instead of tuple causes the error to go away. Also \
I tried changing append to use extend or just to append test object instead of a \
tuple of test object and elapsed time which all pass. Instead of using test object in \
tuple just using (object(), elapsed) as a tuple also causes failure. I guess there is \
something with tuples here but it doesn't make much sense.
On trying to bisect the merge commit I have narrowed down the below commits where the \
PR passes with tuple itself and then fails. In between the success and failure commit \
there were some changes made to hunterleaks and socket.create_server utility was \
added.
f66e336f45 (success)
58721a9030 (success)
2b00db68554422ec37faba2a80179a0172df6349 (fails)
# Sample failure on PR's HEAD on Ubuntu
⋊> ~/cpython on pr_12271 ./python -m test --fail-env-changed -R 3:3 test_socket \
05:45:52 Run tests sequentially
0:00:00 load avg: 0.22 [1/1] test_socket
beginning 6 repetitions
123456
Warning -- threading_cleanup() failed to cleanup 0 threads (count: 0, dangling: 5)
Dangling thread: <Thread(Thread-3, stopped 140152613795584)>
Dangling thread: <Thread(Thread-1, stopped 140152613795584)>
Dangling thread: <Thread(Thread-4, stopped 140152613795584)>
Dangling thread: <Thread(Thread-2, stopped 140152613795584)>
Dangling thread: <_MainThread(MainThread, started 140152731227904)>
......
test_socket failed (env changed) in 3 min 6 sec
== Tests result: ENV CHANGED ==
1 test altered the execution environment:
test_socket
Total duration: 3 min 6 sec
Tests result: ENV CHANGED
The below patch on the PR to use list causes the tests to pass but I am highly \
confused over how changing to tuple to list fixes this and this might potentially be \
hiding a bug.
$ git diff
diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py
index 273ca3beef..b8fd714679 100644
--- a/Lib/unittest/result.py
+++ b/Lib/unittest/result.py
@@ -160,7 +160,7 @@ class TestResult(object):
def addDuration(self, test, elapsed):
"""Called when a test finished to run, regardless of its outcome."""
- self.collectedDurations.append((test, elapsed))
+ self.collectedDurations.append([test, elapsed])
def wasSuccessful(self):
"""Tells whether or not this result was a success."""
[0] https://github.com/python/cpython/commit/3c4af91c1e7c02561efa752885011ff642725bd8
----------
_______________________________________
Python tracker <report@bugs.python.org>
<https://bugs.python.org/issue36750>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/python-bugs-list%40marc.info
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic