[Python-checkins] python/dist/src/Include weakrefobject.h, 1.3.14.1, 1.3.14.2
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; };
participants (1)
-
tim_oneļ¼ users.sourceforge.net