summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2023-10-19 14:52:02 (GMT)
committerGitHub <noreply@github.com>2023-10-19 14:52:02 (GMT)
commitd23a2f988771f4abd771ab4274529dcbf60dae37 (patch)
treef8b38d16b5b1216f271a8e0b1fca055106e219ee
parent6741d5af32101c27c3f930bfc575a7e567f9bf20 (diff)
downloadcpython-d23a2f988771f4abd771ab4274529dcbf60dae37.zip
cpython-d23a2f988771f4abd771ab4274529dcbf60dae37.tar.gz
cpython-d23a2f988771f4abd771ab4274529dcbf60dae37.tar.bz2
gh-76785: Make interpreters.*Channel Objects Shareable (gh-110607)
This restores their shareability, which was disabled by gh-110318 due to ref leaks.
-rw-r--r--Lib/test/support/interpreters.py2
-rw-r--r--Lib/test/test_interpreters.py1
-rw-r--r--Modules/_xxinterpchannelsmodule.c4
3 files changed, 5 insertions, 2 deletions
diff --git a/Lib/test/support/interpreters.py b/Lib/test/support/interpreters.py
index 860b2bb..182f47b 100644
--- a/Lib/test/support/interpreters.py
+++ b/Lib/test/support/interpreters.py
@@ -264,4 +264,4 @@ class SendChannel(_ChannelEnd):
# XXX This is causing leaks (gh-110318):
-#_channels._register_end_types(SendChannel, RecvChannel)
+_channels._register_end_types(SendChannel, RecvChannel)
diff --git a/Lib/test/test_interpreters.py b/Lib/test/test_interpreters.py
index 63d41cb..e124a7c 100644
--- a/Lib/test/test_interpreters.py
+++ b/Lib/test/test_interpreters.py
@@ -833,7 +833,6 @@ class TestChannels(TestBase):
after = set(interpreters.list_all_channels())
self.assertEqual(after, created)
- @unittest.expectedFailure # See gh-110318:
def test_shareable(self):
rch, sch = interpreters.create_channel()
diff --git a/Modules/_xxinterpchannelsmodule.c b/Modules/_xxinterpchannelsmodule.c
index 8dd8050..11fe8cd 100644
--- a/Modules/_xxinterpchannelsmodule.c
+++ b/Modules/_xxinterpchannelsmodule.c
@@ -441,6 +441,10 @@ _get_current_module_state(void)
static int
traverse_module_state(module_state *state, visitproc visit, void *arg)
{
+ /* external types */
+ Py_VISIT(state->send_channel_type);
+ Py_VISIT(state->recv_channel_type);
+
/* heap types */
Py_VISIT(state->ChannelInfoType);
Py_VISIT(state->ChannelIDType);