From 0540bf90d5ef48bb97f3c593736be59428260e90 Mon Sep 17 00:00:00 2001 From: Duprat Date: Thu, 22 May 2025 18:46:57 +0200 Subject: [PATCH] gh-134322: Fix `repr(threading.RLock)` (GH-134389) Fix the `__repr__` value of `threading.RLock` from `_thread` module, when just created. (cherry picked from commit fade146cfb1616ad7b3b918bedb86756dedf79e6) Co-authored-by: Duprat --- Lib/test/lock_tests.py | 20 ++++++++++++++++++++ Lib/test/test_importlib/test_locks.py | 1 + Modules/_threadmodule.c | 8 +++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py index 0e8c75ff5c4994..fb11f4828957ff 100644 --- a/Lib/test/lock_tests.py +++ b/Lib/test/lock_tests.py @@ -332,6 +332,26 @@ class RLockTests(BaseLockTests): """ Tests for recursive locks. """ + def test_repr_count(self): + # see gh-134322: check that count values are correct: + # when a rlock is just created, + # in a second thread when rlock is acquired in the main thread. + lock = self.locktype() + self.assertIn("count=0", repr(lock)) + self.assertIn("lock.thread; int locked = rlock_locked_impl(self); - size_t count = self->lock.level + 1; + size_t count; + if (locked) { + count = self->lock.level + 1; + } + else { + count = 0; + } return PyUnicode_FromFormat( "<%s %s object owner=%" PY_FORMAT_THREAD_IDENT_T " count=%zu at %p>", locked ? "locked" : "unlocked",