diff options
author | Sam Gross <colesbury@gmail.com> | 2025-03-26 18:38:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-26 18:38:47 (GMT) |
commit | 67fbfb42bd5dfe861d0c58d9e6c48d8eef033d24 (patch) | |
tree | 282178fa55571c055c8327dc3d77fa6a882a404b /Lib/test/test_builtin.py | |
parent | 3d4ac1a2c2b610f35a9e164878d67185e4a3546f (diff) | |
download | cpython-67fbfb42bd5dfe861d0c58d9e6c48d8eef033d24.zip cpython-67fbfb42bd5dfe861d0c58d9e6c48d8eef033d24.tar.gz cpython-67fbfb42bd5dfe861d0c58d9e6c48d8eef033d24.tar.bz2 |
gh-131586: Avoid refcount contention in some "special" calls (#131588)
In the free threaded build, the `_PyObject_LookupSpecial()` call can lead to
reference count contention on the returned function object becuase it
doesn't use stackrefs. Refactor some of the callers to use
`_PyObject_MaybeCallSpecialNoArgs`, which uses stackrefs internally.
This fixes the scaling bottleneck in the "lookup_special" microbenchmark
in `ftscalingbench.py`. However, the are still some uses of
`_PyObject_LookupSpecial()` that need to be addressed in future PRs.
Diffstat (limited to 'Lib/test/test_builtin.py')
-rw-r--r-- | Lib/test/test_builtin.py | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 0cc172c..5546e63 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1746,6 +1746,11 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase): a[0] = a self.assertEqual(repr(a), '{0: {...}}') + def test_repr_blocked(self): + class C: + __repr__ = None + self.assertRaises(TypeError, repr, C()) + def test_round(self): self.assertEqual(round(0.0), 0.0) self.assertEqual(type(round(0.0)), int) |