diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2023-09-01 09:16:09 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-01 09:16:09 (GMT) |
commit | 844f4c2e12a7c637d1de93dbbb0718be06553510 (patch) | |
tree | 8985afdbf9c614ca006d4a7c44578ff6586a727d | |
parent | 044b8b3b6a65e6651b161e3badfa5d57c666db19 (diff) | |
download | cpython-844f4c2e12a7c637d1de93dbbb0718be06553510.zip cpython-844f4c2e12a7c637d1de93dbbb0718be06553510.tar.gz cpython-844f4c2e12a7c637d1de93dbbb0718be06553510.tar.bz2 |
gh-108727: Fix segfault due to missing tp_dealloc definition for CounterOptimizer_Type (GH-108734)
-rw-r--r-- | Lib/test/test_capi/test_misc.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2023-08-31-21-29-28.gh-issue-108727.blNRGM.rst | 2 | ||||
-rw-r--r-- | Python/optimizer.c | 1 |
3 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index 4148f15..004ce39 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -2284,6 +2284,13 @@ def clear_executors(func): class TestOptimizerAPI(unittest.TestCase): + def test_get_counter_optimizer_dealloc(self): + # See gh-108727 + def f(): + _testinternalcapi.get_counter_optimizer() + + f() + def test_get_set_optimizer(self): old = _testinternalcapi.get_optimizer() opt = _testinternalcapi.get_counter_optimizer() diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-08-31-21-29-28.gh-issue-108727.blNRGM.rst b/Misc/NEWS.d/next/Core and Builtins/2023-08-31-21-29-28.gh-issue-108727.blNRGM.rst new file mode 100644 index 0000000..34959ae --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-08-31-21-29-28.gh-issue-108727.blNRGM.rst @@ -0,0 +1,2 @@ +Define ``tp_dealloc`` for ``CounterOptimizer_Type``. This fixes a segfault +on deallocation. diff --git a/Python/optimizer.c b/Python/optimizer.c index c311a03..7472f52 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -289,6 +289,7 @@ static PyTypeObject CounterOptimizer_Type = { .tp_itemsize = 0, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, .tp_methods = counter_methods, + .tp_dealloc = (destructor)PyObject_Del, }; PyObject * |