summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2007-12-10 23:58:35 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2007-12-10 23:58:35 (GMT)
commitad8dcd5f1af1b2a6b64040163d011628ab4f7691 (patch)
treed27f5834b89b96f5b10fad0abbb41647026e815e
parentbd2e0c01938bf3afe3a8805e4ce9245b036fc11b (diff)
downloadcpython-ad8dcd5f1af1b2a6b64040163d011628ab4f7691.zip
cpython-ad8dcd5f1af1b2a6b64040163d011628ab4f7691.tar.gz
cpython-ad8dcd5f1af1b2a6b64040163d011628ab4f7691.tar.bz2
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.
-rw-r--r--Doc/library/gc.rst20
-rw-r--r--Misc/NEWS4
-rw-r--r--Modules/gcmodule.c18
3 files changed, 9 insertions, 33 deletions
diff --git a/Doc/library/gc.rst b/Doc/library/gc.rst
index 4a4dfde..99504c6 100644
--- a/Doc/library/gc.rst
+++ b/Doc/library/gc.rst
@@ -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.
-
diff --git a/Misc/NEWS b/Misc/NEWS
index 61e150c..bd5f825 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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'.
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index a5d789a..5fd8923 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -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