Minor cleanup in the gc module.

Removed gc.DEBUG_OBJECT: there is only one kind of objects.
Now gc.DEBUG_COLLECTABLE or gc.DEBUG_UNCOLLECTABLE can be used alone to print the
corresponding list of objects.

Also removed a footnote about version 2.2, and a comment explaining some deleted code.
This commit is contained in:
Amaury Forgeot d'Arc 2007-12-10 23:58:35 +00:00
parent bd2e0c0193
commit ad8dcd5f1a
3 changed files with 9 additions and 33 deletions

View file

@ -131,7 +131,7 @@ value but should not rebind it):
A list of objects which the collector found to be unreachable but could not be A list of objects which the collector found to be unreachable but could not be
freed (uncollectable objects). By default, this list contains only objects with freed (uncollectable objects). By default, this list contains only objects with
:meth:`__del__` methods. [#]_ Objects that have :meth:`__del__` methods and are :meth:`__del__` methods. Objects that have :meth:`__del__` methods and are
part of a reference cycle cause the entire reference cycle to be uncollectable, part of a reference cycle cause the entire reference cycle to be uncollectable,
including objects not necessarily in the cycle but reachable only from it. including objects not necessarily in the cycle but reachable only from it.
Python doesn't collect such cycles automatically because, in general, it isn't Python doesn't collect such cycles automatically because, in general, it isn't
@ -169,18 +169,6 @@ The following constants are provided for use with :func:`set_debug`:
the ``garbage`` list. the ``garbage`` list.
.. data:: DEBUG_INSTANCES
When :const:`DEBUG_COLLECTABLE` or :const:`DEBUG_UNCOLLECTABLE` is set, print
information about instance objects found.
.. data:: DEBUG_OBJECTS
When :const:`DEBUG_COLLECTABLE` or :const:`DEBUG_UNCOLLECTABLE` is set, print
information about objects other than instance objects found.
.. data:: DEBUG_SAVEALL .. data:: DEBUG_SAVEALL
When set, all unreachable objects found will be appended to *garbage* rather When set, all unreachable objects found will be appended to *garbage* rather
@ -191,10 +179,6 @@ The following constants are provided for use with :func:`set_debug`:
The debugging flags necessary for the collector to print information about a The debugging flags necessary for the collector to print information about a
leaking program (equal to ``DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | leaking program (equal to ``DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE |
DEBUG_INSTANCES | DEBUG_OBJECTS | DEBUG_SAVEALL``). DEBUG_SAVEALL``).
.. rubric:: Footnotes .. rubric:: Footnotes
.. [#] Prior to Python 2.2, the list contained all instance objects in unreachable
cycles, not only those with :meth:`__del__` methods.

View file

@ -12,6 +12,10 @@ What's New in Python 3.0a3?
Core and Builtins Core and Builtins
----------------- -----------------
- Constants gc.DEBUG_OBJECT and gc.DEBUG_INSTANCE have been removed from the
gc module; gc.DEBUG_COLLECTABLE or gc.DEBUG_UNCOLLECTABLE are now enough to
print the corresponding list of objects considered by the garbage collector.
- Issue #1580: New free format floating point representation based on - Issue #1580: New free format floating point representation based on
"Floating-Point Printer Sample Code", by Robert G. Burger. For example "Floating-Point Printer Sample Code", by Robert G. Burger. For example
repr(11./5) now returns '2.2' instead of '2.2000000000000002'. repr(11./5) now returns '2.2' instead of '2.2000000000000002'.

View file

@ -66,11 +66,9 @@ static PyObject *delstr = NULL;
#define DEBUG_STATS (1<<0) /* print collection statistics */ #define DEBUG_STATS (1<<0) /* print collection statistics */
#define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */ #define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */
#define DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */ #define DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */
#define DEBUG_OBJECTS (1<<4) /* print other objects */
#define DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */ #define DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */
#define DEBUG_LEAK DEBUG_COLLECTABLE | \ #define DEBUG_LEAK DEBUG_COLLECTABLE | \
DEBUG_UNCOLLECTABLE | \ DEBUG_UNCOLLECTABLE | \
DEBUG_OBJECTS | \
DEBUG_SAVEALL DEBUG_SAVEALL
static int debug; static int debug;
static PyObject *tmod = NULL; static PyObject *tmod = NULL;
@ -398,13 +396,7 @@ move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
} }
} }
/* Return true if object has a finalization method. /* Return true if object has a finalization method. */
* CAUTION: An instance of an old-style class has to be checked for a
*__del__ method, and earlier versions of this used to call PyObject_HasAttr,
* which in turn could call the class's __getattr__ hook (if any). That
* could invoke arbitrary Python code, mutating the object graph in arbitrary
* ways, and that was the source of some excruciatingly subtle bugs.
*/
static int static int
has_finalizer(PyObject *op) has_finalizer(PyObject *op)
{ {
@ -627,10 +619,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
static void static void
debug_cycle(char *msg, PyObject *op) debug_cycle(char *msg, PyObject *op)
{ {
if (debug & DEBUG_OBJECTS) { PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
PySys_WriteStderr("gc: %.100s <%.100s %p>\n", msg, Py_Type(op)->tp_name, op);
msg, Py_Type(op)->tp_name, op);
}
} }
/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable /* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
@ -958,7 +948,6 @@ PyDoc_STRVAR(gc_set_debug__doc__,
" DEBUG_STATS - Print statistics during collection.\n" " DEBUG_STATS - Print statistics during collection.\n"
" DEBUG_COLLECTABLE - Print collectable objects found.\n" " DEBUG_COLLECTABLE - Print collectable objects found.\n"
" DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found.\n" " DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found.\n"
" DEBUG_OBJECTS - Print objects other than instances.\n"
" DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them.\n" " DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them.\n"
" DEBUG_LEAK - Debug leaking programs (everything but STATS).\n"); " DEBUG_LEAK - Debug leaking programs (everything but STATS).\n");
@ -1219,7 +1208,6 @@ initgc(void)
ADD_INT(DEBUG_STATS); ADD_INT(DEBUG_STATS);
ADD_INT(DEBUG_COLLECTABLE); ADD_INT(DEBUG_COLLECTABLE);
ADD_INT(DEBUG_UNCOLLECTABLE); ADD_INT(DEBUG_UNCOLLECTABLE);
ADD_INT(DEBUG_OBJECTS);
ADD_INT(DEBUG_SAVEALL); ADD_INT(DEBUG_SAVEALL);
ADD_INT(DEBUG_LEAK); ADD_INT(DEBUG_LEAK);
#undef ADD_INT #undef ADD_INT