diff Objects/memoryobject.c @ 77213:bc0281f85409

Issue #14930: Make memoryview objects weakrefable.
author Richard Oudkerk <shibturn@gmail.com>
date Mon, 28 May 2012 21:35:09 +0100
parents 9f7d06a9eabe
children 8fbbc7c8748e
line wrap: on
line diff
--- a/Objects/memoryobject.c	Mon May 28 22:23:42 2012 +0200
+++ b/Objects/memoryobject.c	Mon May 28 21:35:09 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;
@@ -969,6 +970,8 @@
     _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 @@
     (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 */