From 3e0a1eb8890c25b9d1f98bc2f4a4bbe2a0cdfdce Mon Sep 17 00:00:00 2001 From: Richard Oudkerk Date: Mon, 28 May 2012 21:35:09 +0100 Subject: Issue #14930: Make memoryview objects weakrefable. --- Objects/memoryobject.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Objects/memoryobject.c') diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 67f7e01fe2..62427d4b86 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -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 */ -- cgit v1.2.1