[3.13] gh-121596: Fix Sharing Interpreter Channels (gh-121600)

This fixes a mistake in gh-113012 and adds a test that verifies the fix.

(cherry picked from commit 35a67e36aa, AKA gh-121597)

Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
This commit is contained in:
Miss Islington (bot) 2024-07-10 23:54:47 +02:00 committed by GitHub
parent 85e9018a01
commit 5bb117586e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 2 deletions

View File

@ -48,6 +48,7 @@ class TestChannels(TestBase):
self.assertEqual(after, created)
def test_shareable(self):
interp = interpreters.create()
rch, sch = channels.create()
self.assertTrue(
@ -60,8 +61,25 @@ class TestChannels(TestBase):
rch2 = rch.recv()
sch2 = rch.recv()
interp.prepare_main(rch=rch, sch=sch)
sch.send_nowait(rch)
sch.send_nowait(sch)
interp.exec(dedent("""
rch2 = rch.recv()
sch2 = rch.recv()
assert rch2 == rch
assert sch2 == sch
sch.send_nowait(rch2)
sch.send_nowait(sch2)
"""))
rch3 = rch.recv()
sch3 = rch.recv()
self.assertEqual(rch2, rch)
self.assertEqual(sch2, sch)
self.assertEqual(rch3, rch)
self.assertEqual(sch3, sch)
def test_is_closed(self):
rch, sch = channels.create()

View File

@ -2615,10 +2615,10 @@ _get_current_channelend_type(int end)
}
if (cls == NULL) {
// Force the module to be loaded, to register the type.
PyObject *highlevel = PyImport_ImportModule("interpreters.channel");
PyObject *highlevel = PyImport_ImportModule("interpreters.channels");
if (highlevel == NULL) {
PyErr_Clear();
highlevel = PyImport_ImportModule("test.support.interpreters.channel");
highlevel = PyImport_ImportModule("test.support.interpreters.channels");
if (highlevel == NULL) {
return NULL;
}