From 2bb4e2e18121d10f313a83c54658adb6ae82c9ec Mon Sep 17 00:00:00 2001 From: Tian Gao Date: Sat, 4 May 2024 17:01:13 -0700 Subject: [PATCH 1/2] Fix an extra DECREF for pep 667 implementation --- Lib/test/test_frame.py | 16 ++++++++++++++++ Objects/frameobject.c | 1 - 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py index 93d0ea839d16eb..9854a83d750150 100644 --- a/Lib/test/test_frame.py +++ b/Lib/test/test_frame.py @@ -364,6 +364,22 @@ def f(): c = 0 f() + def test_local_objects(self): + o = object() + k = '.'.join(['a', 'b', 'c']) + f_locals = sys._getframe().f_locals + f_locals['o'] = f_locals['k'] + self.assertEqual(o, 'a.b.c') + + def test_update_with_self(self): + # Make sure reference is not leaking here + def f(): + f_locals = sys._getframe().f_locals + f_locals.update(f_locals) + f_locals.update(f_locals) + f_locals.update(f_locals) + f() + def test_repr(self): x = 1 # Introduce a reference cycle diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 8030ecb6853674..1cb00e318d9163 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -171,7 +171,6 @@ framelocalsproxy_setitem(PyObject *self, PyObject *key, PyObject *value) } else if (value != oldvalue) { Py_XSETREF(fast[i], Py_NewRef(value)); } - Py_XDECREF(value); return 0; } } From 0bbfd4fb8164438ee5ad98908d140a714df9881a Mon Sep 17 00:00:00 2001 From: Tian Gao Date: Sat, 4 May 2024 19:42:29 -0700 Subject: [PATCH 2/2] Delete comment --- Lib/test/test_frame.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py index 9854a83d750150..212255374bddd1 100644 --- a/Lib/test/test_frame.py +++ b/Lib/test/test_frame.py @@ -372,7 +372,6 @@ def test_local_objects(self): self.assertEqual(o, 'a.b.c') def test_update_with_self(self): - # Make sure reference is not leaking here def f(): f_locals = sys._getframe().f_locals f_locals.update(f_locals)