bpo-32604: Fix memory leaks in the new _xxsubinterpreters module. (#5507)

This commit is contained in:
Eric Snow 2018-02-02 21:49:49 -07:00 committed by GitHub
parent 2f79c01493
commit 4e9da0d163
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 661 additions and 330 deletions

View File

@ -362,13 +362,15 @@ class DestroyTests(TestBase):
def test_from_current(self):
main, = interpreters.list_all()
id = interpreters.create()
script = dedent("""
script = dedent(f"""
import _xxsubinterpreters as _interpreters
_interpreters.destroy({})
""").format(id)
try:
_interpreters.destroy({id})
except RuntimeError:
pass
""")
with self.assertRaises(RuntimeError):
interpreters.run_string(id, script)
interpreters.run_string(id, script)
self.assertEqual(set(interpreters.list_all()), {main, id})
def test_from_sibling(self):
@ -761,12 +763,12 @@ class ChannelIDTests(TestBase):
self.assertEqual(int(cid), 10)
def test_bad_id(self):
ids = [-1, 2**64, "spam"]
for cid in ids:
for cid in [-1, 'spam']:
with self.subTest(cid):
with self.assertRaises(ValueError):
interpreters._channel_id(cid)
with self.assertRaises(OverflowError):
interpreters._channel_id(2**64)
with self.assertRaises(TypeError):
interpreters._channel_id(object())

File diff suppressed because it is too large Load Diff

View File

@ -1242,6 +1242,7 @@ _PyCrossInterpreterData_Lookup(PyObject *obj)
break;
}
}
Py_DECREF(cls);
PyThread_release_lock(_PyRuntime.xidregistry.mutex);
return getdata;
}