]> granicus.if.org Git - python/commitdiff
Make the gc.collect() function respect the collection lock. This fixes
authorNeil Schemenauer <nascheme@enme.ucalgary.ca>
Wed, 31 Oct 2001 23:09:35 +0000 (23:09 +0000)
committerNeil Schemenauer <nascheme@enme.ucalgary.ca>
Wed, 31 Oct 2001 23:09:35 +0000 (23:09 +0000)
SF bug 476129: "gc.collect sometimes hangs".

Modules/gcmodule.c

index ed846cc78a24d30310e39ed6acb6e73c85157004..0badc23a4d3404794cff02e6e9106908efab5fc9 100644 (file)
@@ -548,10 +548,17 @@ gc_collect(PyObject *self, PyObject *args)
        if (!PyArg_ParseTuple(args, ":collect"))        /* check no args */
                return NULL;
 
-       generation = 2;
-       gc_list_merge(&_PyGC_generation0, &generation2);
-       gc_list_merge(&generation1, &generation2);
-       n = collect(&generation2, &generation2);
+       if (collecting) {
+               n = 0; /* already collecting, don't do anything */
+       }
+       else {
+               collecting = 1;
+               generation = 2;
+               gc_list_merge(&_PyGC_generation0, &generation2);
+               gc_list_merge(&generation1, &generation2);
+               n = collect(&generation2, &generation2);
+               collecting = 0;
+       }
 
        return Py_BuildValue("l", n);
 }