https://github.com/python/cpython/commit/2f56c68dec97002fdd8563a0e4977b75eb191ab9 commit: 2f56c68dec97002fdd8563a0e4977b75eb191ab9 branch: 3.13 author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com> committer: kumaraditya303 <kumaradi...@python.org> date: 2024-11-29T16:36:44Z summary:
[3.13] gh-127316: fix incorrect assertion in setting `__class__` in free-threading (GH-127399) (#127422) gh-127316: fix incorrect assertion in setting `__class__` in free-threading (GH-127399) (cherry picked from commit 45c5cba318a19dda3ee6f9fc84781cc7a2fbde80) Co-authored-by: Kumar Aditya <kumaradi...@python.org> files: M Lib/test/test_free_threading/test_type.py M Objects/dictobject.c diff --git a/Lib/test/test_free_threading/test_type.py b/Lib/test/test_free_threading/test_type.py index 3e565cb7ea0f7b..d847acfd6f9edb 100644 --- a/Lib/test/test_free_threading/test_type.py +++ b/Lib/test/test_free_threading/test_type.py @@ -125,6 +125,21 @@ def work(): for thread in threads: thread.join() + def test_object_class_change(self): + class Base: + def __init__(self): + self.attr = 123 + class ClassA(Base): + pass + class ClassB(Base): + pass + + obj = ClassA() + # keep reference to __dict__ + d = obj.__dict__ + obj.__class__ = ClassB + + def run_one(self, writer_func, reader_func): writer = Thread(target=writer_func) readers = [] diff --git a/Objects/dictobject.c b/Objects/dictobject.c index fccc8e930f51d6..f1f9110ff73e6d 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -7190,7 +7190,7 @@ _PyDict_DetachFromObject(PyDictObject *mp, PyObject *obj) // We could be called with an unlocked dict when the caller knows the // values are already detached, so we assert after inline values check. - _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(mp); + ASSERT_WORLD_STOPPED_OR_OBJ_LOCKED(mp); assert(mp->ma_values->embedded == 1); assert(mp->ma_values->valid == 1); assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES); _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com