From: Serhiy Storchaka Date: Mon, 27 Oct 2025 19:42:32 +0000 (+0200) Subject: gh-140634: Fix a reference counting bug in os.sched_param.__reduce__() (GH-140667) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=364ae607d8035db8ba92486ebebd8225446c1a90;p=thirdparty%2FPython%2Fcpython.git gh-140634: Fix a reference counting bug in os.sched_param.__reduce__() (GH-140667) --- diff --git a/Lib/test/test_os/test_posix.py b/Lib/test/test_os/test_posix.py index de24719a1ca4..37da293a441e 100644 --- a/Lib/test/test_os/test_posix.py +++ b/Lib/test/test_os/test_posix.py @@ -1427,6 +1427,14 @@ class PosixTester(unittest.TestCase): self.assertNotEqual(newparam, param) self.assertEqual(newparam.sched_priority, 0) + @requires_sched + def test_bug_140634(self): + sched_priority = float('inf') # any new reference + param = posix.sched_param(sched_priority) + param.__reduce__() + del sched_priority, param # should not crash + support.gc_collect() # just to be sure + @unittest.skipUnless(hasattr(posix, "sched_rr_get_interval"), "no function") def test_sched_rr_get_interval(self): try: diff --git a/Misc/NEWS.d/next/Library/2025-10-27-13-49-31.gh-issue-140634.ULng9G.rst b/Misc/NEWS.d/next/Library/2025-10-27-13-49-31.gh-issue-140634.ULng9G.rst new file mode 100644 index 000000000000..b1ba9b26ad54 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-10-27-13-49-31.gh-issue-140634.ULng9G.rst @@ -0,0 +1 @@ +Fix a reference counting bug in :meth:`!os.sched_param.__reduce__`. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a30712f75d5d..50464b01efba 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8724,7 +8724,7 @@ os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority) static PyObject * os_sched_param_reduce(PyObject *self, PyObject *Py_UNUSED(dummy)) { - return Py_BuildValue("(O(N))", Py_TYPE(self), PyStructSequence_GetItem(self, 0)); + return Py_BuildValue("(O(O))", Py_TYPE(self), PyStructSequence_GetItem(self, 0)); } static PyMethodDef os_sched_param_reduce_method = {