[Python-checkins] python/dist/src/Include weakrefobject.h,1.5,1.6

tim_one at users.sourceforge.net tim_one at users.sourceforge.net
Sun Oct 31 01:09:52 CEST 2004


Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22636/Include

Modified Files:
	weakrefobject.h 
Log Message:
SF 1055820: weakref callback vs gc vs threads

In cyclic gc, clear 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.  I'll backport to 2.3.


Index: weakrefobject.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/weakrefobject.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- weakrefobject.h	2 Jul 2004 18:57:42 -0000	1.5
+++ weakrefobject.h	30 Oct 2004 23:09:19 -0000	1.6
@@ -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