[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