Browse Source

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 f5b76330cf)

Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
pull/94753/head
Miss Islington (bot) 3 years ago
committed by GitHub
parent
commit
916686fdb2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      Lib/test/_test_multiprocessing.py
  2. 1
      Misc/NEWS.d/next/Library/2022-07-11-10-41-48.gh-issue-94736.EbsgeK.rst
  3. 6
      Modules/_multiprocessing/semaphore.c

11
Lib/test/_test_multiprocessing.py

@ -5964,3 +5964,14 @@ def install_tests_in_module_dict(remote_globs, start_method):
remote_globs['setUpModule'] = setUpModule
remote_globs['tearDownModule'] = tearDownModule
@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)

1
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.

6
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]

Loading…
Cancel
Save