]> granicus.if.org Git - python/commitdiff
apply patch #101362 by Vladimir Marangozov
authorJeremy Hylton <jeremy@alum.mit.edu>
Thu, 31 Aug 2000 15:10:24 +0000 (15:10 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Thu, 31 Aug 2000 15:10:24 +0000 (15:10 +0000)
also initial static debug variable to 0

Modules/gcmodule.c

index 8e495e63ba42e52e1ebb15ba40de3d915f487fe6..57ee7b914348b4aa79647eb488d16b306bc36010 100644 (file)
@@ -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;
 }