summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2000-08-31 15:10:24 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2000-08-31 15:10:24 (GMT)
commit0625777b53838d16fe11f57f5f79767dc539b738 (patch)
tree466d690ec87f58c64f31ce81e2bb290804dccc2a
parent1365a300a132b96f1e4c1dee2de033acb3a07ef3 (diff)
downloadcpython-0625777b53838d16fe11f57f5f79767dc539b738.zip
cpython-0625777b53838d16fe11f57f5f79767dc539b738.tar.gz
cpython-0625777b53838d16fe11f57f5f79767dc539b738.tar.bz2
apply patch #101362 by Vladimir Marangozov
also initial static debug variable to 0
-rw-r--r--Modules/gcmodule.c57
1 files changed, 24 insertions, 33 deletions
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 8e495e6..57ee7b9 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -57,7 +57,7 @@ static int allocated;
DEBUG_UNCOLLECTABLE | \
DEBUG_INSTANCES | \
DEBUG_OBJECTS
-static int debug;
+static int debug = 0;
/* list of uncollectable objects */
static PyObject *garbage;
@@ -222,9 +222,11 @@ move_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
{
PyGC_Head *next;
PyGC_Head *gc = unreachable->gc_next;
- static PyObject *delstr;
+ static PyObject *delstr = NULL;
if (delstr == NULL) {
delstr = PyString_InternFromString("__del__");
+ if (delstr == NULL)
+ Py_FatalError("PyGC: can't initialize __del__ string");
}
for (; gc != unreachable; gc=next) {
PyObject *op = PyObject_FROM_GC(gc);
@@ -268,9 +270,8 @@ move_finalizer_reachable(PyGC_Head *finalizers)
}
static void
-debug_instance(PyObject *output, char *msg, PyInstanceObject *inst)
+debug_instance(char *msg, PyInstanceObject *inst)
{
- char buf[200];
char *cname;
/* be careful not to create new dictionaries */
PyObject *classname = inst->in_class->cl_name;
@@ -278,20 +279,18 @@ debug_instance(PyObject *output, char *msg, PyInstanceObject *inst)
cname = PyString_AsString(classname);
else
cname = "?";
- sprintf(buf, "gc: %s<%.100s instance at %p>\n", msg, cname, inst);
- PyFile_WriteString(buf, output);
+ PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n",
+ msg, cname, inst);
}
static void
-debug_cycle(PyObject *output, char *msg, PyObject *op)
+debug_cycle(char *msg, PyObject *op)
{
if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) {
- debug_instance(output, msg, (PyInstanceObject *)op);
+ debug_instance(msg, (PyInstanceObject *)op);
} else if (debug & DEBUG_OBJECTS) {
- char buf[200];
- sprintf(buf, "gc: %s<%.100s %p>\n", msg,
- op->ob_type->tp_name, op);
- PyFile_WriteString(buf, output);
+ PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
+ msg, op->ob_type->tp_name, op);
}
}
@@ -357,20 +356,15 @@ collect(PyGC_Head *young, PyGC_Head *old)
PyGC_Head unreachable;
PyGC_Head finalizers;
PyGC_Head *gc;
- PyObject *output = NULL;
- if (debug) {
- output = PySys_GetObject("stderr");
- }
if (debug & DEBUG_STATS) {
- char buf[100];
- sprintf(buf, "gc: collecting generation %d...\n", generation);
- PyFile_WriteString(buf,output);
- sprintf(buf, "gc: objects in each generation: %ld %ld %ld\n",
+ PySys_WriteStderr(
+ "gc: collecting generation %d...\n"
+ "gc: objects in each generation: %ld %ld %ld\n",
+ generation,
gc_list_size(&generation0),
gc_list_size(&generation1),
gc_list_size(&generation2));
- PyFile_WriteString(buf,output);
}
/* Using ob_refcnt and gc_refs, calculate which objects in the
@@ -408,8 +402,8 @@ collect(PyGC_Head *young, PyGC_Head *old)
for (gc = unreachable.gc_next; gc != &unreachable;
gc = gc->gc_next) {
m++;
- if (output != NULL && (debug & DEBUG_COLLECTABLE)) {
- debug_cycle(output, "collectable ", PyObject_FROM_GC(gc));
+ if (debug & DEBUG_COLLECTABLE) {
+ debug_cycle("collectable", PyObject_FROM_GC(gc));
}
}
/* call tp_clear on objects in the collectable set. This will cause
@@ -422,19 +416,17 @@ collect(PyGC_Head *young, PyGC_Head *old)
for (gc = finalizers.gc_next; gc != &finalizers;
gc = gc->gc_next) {
n++;
- if (output != NULL && (debug & DEBUG_UNCOLLECTABLE)) {
- debug_cycle(output, "uncollectable ", PyObject_FROM_GC(gc));
+ if (debug & DEBUG_UNCOLLECTABLE) {
+ debug_cycle("uncollectable", PyObject_FROM_GC(gc));
}
}
- if (output != NULL && (debug & DEBUG_STATS)) {
+ if (debug & DEBUG_STATS) {
if (m == 0 && n == 0) {
- PyFile_WriteString("gc: done.\n", output);
+ PySys_WriteStderr("gc: done.\n");
} else {
- char buf[200];
- sprintf(buf,
- "gc: done, %ld unreachable, %ld uncollectable.\n",
- n+m, n);
- PyFile_WriteString(buf, output);
+ PySys_WriteStderr(
+ "gc: done, %ld unreachable, %ld uncollectable.\n",
+ n+m, n);
}
}
@@ -444,7 +436,6 @@ collect(PyGC_Head *young, PyGC_Head *old)
handle_finalizers(&finalizers, old);
allocated = 0;
- PyErr_Clear(); /* in case writing to sys.stderr failed */
return n+m;
}