# HG changeset patch # Parent adc63721cc1acdd3e6e12306b6fd23a6c3f35ad7 diff -r adc63721cc1a Include/memoryobject.h --- a/Include/memoryobject.h Sun May 27 18:25:34 2012 +0100 +++ b/Include/memoryobject.h Sun May 27 19:35:03 2012 +0100 @@ -63,6 +63,7 @@ Py_ssize_t exports; /* number of buffer re-exports */ Py_buffer view; /* private copy of the exporter's view */ char format[_Py_MEMORYVIEW_MAX_FORMAT]; /* used for casting */ + PyObject *weakreflist; Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */ } PyMemoryViewObject; #endif diff -r adc63721cc1a Objects/memoryobject.c --- a/Objects/memoryobject.c Sun May 27 18:25:34 2012 +0100 +++ b/Objects/memoryobject.c Sun May 27 19:35:03 2012 +0100 @@ -595,6 +595,7 @@ 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; @@ -967,6 +968,8 @@ { assert(self->exports == 0); _PyObject_GC_UNTRACK(self); + if (self->weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) self); (void)_memory_release(self); Py_CLEAR(self->mbuf); PyObject_GC_Del(self); @@ -2608,7 +2611,7 @@ (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 */