[Python-checkins]
python/dist/src/Include weakrefobject.h, 1.3.14.1, 1.3.14.2
tim_one at users.sourceforge.net
tim_one at users.sourceforge.net
Sun Oct 31 02:13:37 CEST 2004
Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2582/Include
Modified Files:
Tag: release23-maint
weakrefobject.h
Log Message:
SF 1055820: weakref callback vs gc vs threads
In cyclic gc, clear all weakrefs to unreachable objects before allowing any
Python code (weakref callbacks or __del__ methods) to run.
This is a critical bugfix, affecting all versions of Python since weakrefs
were introduced.
Index: weakrefobject.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/weakrefobject.h,v
retrieving revision 1.3.14.1
retrieving revision 1.3.14.2
diff -u -d -r1.3.14.1 -r1.3.14.2
--- weakrefobject.h 20 Nov 2003 22:13:50 -0000 1.3.14.1
+++ weakrefobject.h 31 Oct 2004 00:13:04 -0000 1.3.14.2
@@ -9,11 +9,31 @@
typedef struct _PyWeakReference PyWeakReference;
+/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType,
+ * and CallableProxyType.
+ */
struct _PyWeakReference {
PyObject_HEAD
+
+ /* The object to which this is a weak reference, or Py_None if none.
+ * Note that this is a stealth reference: wr_object's refcount is
+ * not incremented to reflect this pointer.
+ */
PyObject *wr_object;
+
+ /* A callable to invoke when wr_object dies, or NULL if none. */
PyObject *wr_callback;
+
+ /* A cache for wr_object's hash code. As usual for hashes, this is -1
+ * if the hash code isn't known yet.
+ */
long hash;
+
+ /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL-
+ * terminated list of weak references to it. These are the list pointers.
+ * If wr_object goes away, wr_object is set to Py_None, and these pointers
+ * have no meaning then.
+ */
PyWeakReference *wr_prev;
PyWeakReference *wr_next;
};
More information about the Python-checkins
mailing list