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
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,
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
@ -169,18 +169,6 @@ The following constants are provided for use with :func:`set_debug`:
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
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
leaking program (equal to ``DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE |
DEBUG_INSTANCES | DEBUG_OBJECTS | DEBUG_SAVEALL``).
DEBUG_SAVEALL``).
.. 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
-----------------
- 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
"Floating-Point Printer Sample Code", by Robert G. Burger. For example
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_COLLECTABLE (1<<1) /* print collectable 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_LEAK DEBUG_COLLECTABLE | \
DEBUG_UNCOLLECTABLE | \
DEBUG_OBJECTS | \
DEBUG_SAVEALL
static int debug;
static PyObject *tmod = NULL;
@ -398,13 +396,7 @@ move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
}
}
/* 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.
*/
/* Return true if object has a finalization method. */
static int
has_finalizer(PyObject *op)
{
@ -627,10 +619,8 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
static void
debug_cycle(char *msg, PyObject *op)
{
if (debug & DEBUG_OBJECTS) {
PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
msg, Py_Type(op)->tp_name, op);
}
PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
msg, Py_Type(op)->tp_name, op);
}
/* 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_COLLECTABLE - Print collectable 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_LEAK - Debug leaking programs (everything but STATS).\n");
@ -1219,7 +1208,6 @@ initgc(void)
ADD_INT(DEBUG_STATS);
ADD_INT(DEBUG_COLLECTABLE);
ADD_INT(DEBUG_UNCOLLECTABLE);
ADD_INT(DEBUG_OBJECTS);
ADD_INT(DEBUG_SAVEALL);
ADD_INT(DEBUG_LEAK);
#undef ADD_INT