[Python-checkins] GH-94736: Fix _multiprocessing.SemLock subclassing (GH-94738)
miss-islington
webhook-mailer at python.org
Mon Jul 11 08:39:22 EDT 2022
https://github.com/python/cpython/commit/916686fdb273d6adbd403e6d58029960ec7a89ab
commit: 916686fdb273d6adbd403e6d58029960ec7a89ab
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-07-11T05:39:09-07:00
summary:
GH-94736: Fix _multiprocessing.SemLock subclassing (GH-94738)
* fix allocator and deallocator
* 📜🤖 Added by blurb_it.
* code review
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
(cherry picked from commit f5b76330cfb93e1ad1a77c71dafe719f6a808cec)
Co-authored-by: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2022-07-11-10-41-48.gh-issue-94736.EbsgeK.rst
M Lib/test/_test_multiprocessing.py
M Modules/_multiprocessing/semaphore.c
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index ba488b17920ef..08eea47441675 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -5964,3 +5964,14 @@ def tearDownModule():
remote_globs['setUpModule'] = setUpModule
remote_globs['tearDownModule'] = tearDownModule
+
+
+ at unittest.skipIf(not hasattr(_multiprocessing, 'SemLock'), 'SemLock not available')
+class SemLockTests(unittest.TestCase):
+
+ def test_semlock_subclass(self):
+ class SemLock(_multiprocessing.SemLock):
+ pass
+ name = f'test_semlock_subclass-{os.getpid()}'
+ s = SemLock(1, 0, 10, name, 0)
+ _multiprocessing.sem_unlink(name)
diff --git a/Misc/NEWS.d/next/Library/2022-07-11-10-41-48.gh-issue-94736.EbsgeK.rst b/Misc/NEWS.d/next/Library/2022-07-11-10-41-48.gh-issue-94736.EbsgeK.rst
new file mode 100644
index 0000000000000..3080672ecdfbb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-07-11-10-41-48.gh-issue-94736.EbsgeK.rst
@@ -0,0 +1 @@
+Fix crash when deallocating an instance of a subclass of ``_multiprocessing.SemLock``. Patch by Kumar Aditya.
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index 9a2d1f85c92fa..3356658fef189 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -452,9 +452,7 @@ static PyObject *
newsemlockobject(PyTypeObject *type, SEM_HANDLE handle, int kind, int maxvalue,
char *name)
{
- SemLockObject *self;
-
- self = PyObject_New(SemLockObject, type);
+ SemLockObject *self = (SemLockObject *)type->tp_alloc(type, 0);
if (!self)
return NULL;
self->handle = handle;
@@ -571,7 +569,7 @@ semlock_dealloc(SemLockObject* self)
if (self->handle != SEM_FAILED)
SEM_CLOSE(self->handle);
PyMem_Free(self->name);
- PyObject_Free(self);
+ Py_TYPE(self)->tp_free((PyObject*)self);
}
/*[clinic input]
More information about the Python-checkins
mailing list