Issue #14930: Make memoryview objects weakrefable.

This commit is contained in:
Richard Oudkerk 2012-05-28 21:35:09 +01:00
parent 1cfe7d9a84
commit 3e0a1eb889
5 changed files with 23 additions and 2 deletions

View file

@ -595,6 +595,7 @@ memory_alloc(int ndim)
mv->view.shape = mv->ob_array;
mv->view.strides = mv->ob_array + ndim;
mv->view.suboffsets = mv->ob_array + 2 * ndim;
mv->weakreflist = NULL;
_PyObject_GC_TRACK(mv);
return mv;
@ -969,6 +970,8 @@ memory_dealloc(PyMemoryViewObject *self)
_PyObject_GC_UNTRACK(self);
(void)_memory_release(self);
Py_CLEAR(self->mbuf);
if (self->weakreflist != NULL)
PyObject_ClearWeakRefs((PyObject *) self);
PyObject_GC_Del(self);
}
@ -2608,7 +2611,7 @@ PyTypeObject PyMemoryView_Type = {
(traverseproc)memory_traverse, /* tp_traverse */
(inquiry)memory_clear, /* tp_clear */
memory_richcompare, /* tp_richcompare */
0, /* tp_weaklistoffset */
offsetof(PyMemoryViewObject, weakreflist),/* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
memory_methods, /* tp_methods */