blob: 384c47ddcfd99360486d26456588b355a59f0420 [file] [log] [blame]
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001/*
Tim Peters88396172002-06-30 17:56:40 +00002
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00003 Reference Cycle Garbage Collection
4 ==================================
5
Neil Schemenauerb2c2c9e2000-10-04 16:34:09 +00006 Neil Schemenauer <nas@arctrix.com>
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00007
8 Based on a post on the python-dev list. Ideas from Guido van Rossum,
9 Eric Tiedemann, and various others.
10
Neil Schemenauer43411b52001-08-30 00:05:51 +000011 http://www.arctrix.com/nas/python/gc/
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000012 http://www.python.org/pipermail/python-dev/2000-March/003869.html
13 http://www.python.org/pipermail/python-dev/2000-March/004010.html
14 http://www.python.org/pipermail/python-dev/2000-March/004022.html
15
16 For a highlevel view of the collection process, read the collect
17 function.
18
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000019*/
20
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000021#include "Python.h"
Antoine Pitrouc83ea132010-05-09 14:46:46 +000022#include "frameobject.h" /* for PyFrame_ClearFreeList */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000023
Neil Schemenauer43411b52001-08-30 00:05:51 +000024/* Get an object's GC head */
25#define AS_GC(o) ((PyGC_Head *)(o)-1)
26
27/* Get the object given the GC head */
28#define FROM_GC(g) ((PyObject *)(((PyGC_Head *)g)+1))
29
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000030/*** Global GC state ***/
31
Neil Schemenauer2880ae52002-05-04 05:35:20 +000032struct gc_generation {
Antoine Pitrouc83ea132010-05-09 14:46:46 +000033 PyGC_Head head;
34 int threshold; /* collection threshold */
35 int count; /* count of allocations or collections of younger
36 generations */
Neil Schemenauer2880ae52002-05-04 05:35:20 +000037};
38
39#define NUM_GENERATIONS 3
40#define GEN_HEAD(n) (&generations[n].head)
41
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000042/* linked lists of container objects */
Neil Schemenauer2880ae52002-05-04 05:35:20 +000043static struct gc_generation generations[NUM_GENERATIONS] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +000044 /* PyGC_Head, threshold, count */
45 {{{GEN_HEAD(0), GEN_HEAD(0), 0}}, 700, 0},
46 {{{GEN_HEAD(1), GEN_HEAD(1), 0}}, 10, 0},
47 {{{GEN_HEAD(2), GEN_HEAD(2), 0}}, 10, 0},
Neil Schemenauer2880ae52002-05-04 05:35:20 +000048};
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000049
Neil Schemenauer2880ae52002-05-04 05:35:20 +000050PyGC_Head *_PyGC_generation0 = GEN_HEAD(0);
51
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +000052static int enabled = 1; /* automatic collection enabled? */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000053
Neil Schemenauer43411b52001-08-30 00:05:51 +000054/* true if we are currently running the collector */
Tim Petersbf384c22003-04-06 00:11:39 +000055static int collecting = 0;
Neil Schemenauer43411b52001-08-30 00:05:51 +000056
Tim Peters6fc13d92002-07-02 18:12:35 +000057/* list of uncollectable objects */
Tim Petersbf384c22003-04-06 00:11:39 +000058static PyObject *garbage = NULL;
Tim Peters6fc13d92002-07-02 18:12:35 +000059
60/* Python string to use if unhandled exception occurs */
Tim Petersbf384c22003-04-06 00:11:39 +000061static PyObject *gc_str = NULL;
Tim Peters6fc13d92002-07-02 18:12:35 +000062
Tim Peters93ad66d2003-04-05 17:15:44 +000063/* Python string used to look for __del__ attribute. */
64static PyObject *delstr = NULL;
Jeremy Hyltonce136e92003-04-04 19:59:06 +000065
Antoine Pitrou4c5ecb72009-01-09 21:40:55 +000066/* This is the number of objects who survived the last full collection. It
67 approximates the number of long lived objects tracked by the GC.
68
69 (by "full collection", we mean a collection of the oldest generation).
70*/
71static Py_ssize_t long_lived_total = 0;
72
73/* This is the number of objects who survived all "non-full" collections,
74 and are awaiting to undergo a full collection for the first time.
75
76*/
77static Py_ssize_t long_lived_pending = 0;
78
79/*
80 NOTE: about the counting of long-lived objects.
81
82 To limit the cost of garbage collection, there are two strategies;
83 - make each collection faster, e.g. by scanning fewer objects
84 - do less collections
85 This heuristic is about the latter strategy.
86
87 In addition to the various configurable thresholds, we only trigger a
88 full collection if the ratio
Antoine Pitrouc83ea132010-05-09 14:46:46 +000089 long_lived_pending / long_lived_total
Antoine Pitrou4c5ecb72009-01-09 21:40:55 +000090 is above a given value (hardwired to 25%).
91
92 The reason is that, while "non-full" collections (i.e., collections of
93 the young and middle generations) will always examine roughly the same
94 number of objects -- determined by the aforementioned thresholds --,
95 the cost of a full collection is proportional to the total number of
96 long-lived objects, which is virtually unbounded.
97
98 Indeed, it has been remarked that doing a full collection every
99 <constant number> of object creations entails a dramatic performance
100 degradation in workloads which consist in creating and storing lots of
101 long-lived objects (e.g. building a large list of GC-tracked objects would
102 show quadratic performance, instead of linear as expected: see issue #4074).
103
104 Using the above ratio, instead, yields amortized linear performance in
105 the total number of objects (the effect of which can be summarized
106 thusly: "each full garbage collection is more and more costly as the
107 number of objects grows, but we do fewer and fewer of them").
108
109 This heuristic was suggested by Martin von Löwis on python-dev in
110 June 2008. His original analysis and proposal can be found at:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000111 http://mail.python.org/pipermail/python-dev/2008-June/080579.html
Antoine Pitrou4c5ecb72009-01-09 21:40:55 +0000112*/
113
114
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000115/* set for debugging information */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000116#define DEBUG_STATS (1<<0) /* print collection statistics */
117#define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */
118#define DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */
119#define DEBUG_INSTANCES (1<<3) /* print instances */
120#define DEBUG_OBJECTS (1<<4) /* print other objects */
121#define DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */
122#define DEBUG_LEAK DEBUG_COLLECTABLE | \
123 DEBUG_UNCOLLECTABLE | \
124 DEBUG_INSTANCES | \
125 DEBUG_OBJECTS | \
126 DEBUG_SAVEALL
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000127static int debug;
Neal Norwitz57a03612006-04-26 05:34:03 +0000128static PyObject *tmod = NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000129
Tim Peters6fc13d92002-07-02 18:12:35 +0000130/*--------------------------------------------------------------------------
131gc_refs values.
Neil Schemenauer43411b52001-08-30 00:05:51 +0000132
Tim Peters6fc13d92002-07-02 18:12:35 +0000133Between collections, every gc'ed object has one of two gc_refs values:
134
135GC_UNTRACKED
136 The initial state; objects returned by PyObject_GC_Malloc are in this
137 state. The object doesn't live in any generation list, and its
138 tp_traverse slot must not be called.
139
140GC_REACHABLE
141 The object lives in some generation list, and its tp_traverse is safe to
142 call. An object transitions to GC_REACHABLE when PyObject_GC_Track
143 is called.
144
145During a collection, gc_refs can temporarily take on other states:
146
147>= 0
148 At the start of a collection, update_refs() copies the true refcount
149 to gc_refs, for each object in the generation being collected.
150 subtract_refs() then adjusts gc_refs so that it equals the number of
151 times an object is referenced directly from outside the generation
152 being collected.
Martin v. Löwis774348c2002-11-09 19:54:06 +0000153 gc_refs remains >= 0 throughout these steps.
Tim Peters6fc13d92002-07-02 18:12:35 +0000154
155GC_TENTATIVELY_UNREACHABLE
156 move_unreachable() then moves objects not reachable (whether directly or
157 indirectly) from outside the generation into an "unreachable" set.
158 Objects that are found to be reachable have gc_refs set to GC_REACHABLE
159 again. Objects that are found to be unreachable have gc_refs set to
160 GC_TENTATIVELY_UNREACHABLE. It's "tentatively" because the pass doing
161 this can't be sure until it ends, and GC_TENTATIVELY_UNREACHABLE may
162 transition back to GC_REACHABLE.
163
164 Only objects with GC_TENTATIVELY_UNREACHABLE still set are candidates
165 for collection. If it's decided not to collect such an object (e.g.,
166 it has a __del__ method), its gc_refs is restored to GC_REACHABLE again.
167----------------------------------------------------------------------------
168*/
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000169#define GC_UNTRACKED _PyGC_REFS_UNTRACKED
170#define GC_REACHABLE _PyGC_REFS_REACHABLE
171#define GC_TENTATIVELY_UNREACHABLE _PyGC_REFS_TENTATIVELY_UNREACHABLE
Tim Peters19b74c72002-07-01 03:52:19 +0000172
Tim Peters6fc13d92002-07-02 18:12:35 +0000173#define IS_TRACKED(o) ((AS_GC(o))->gc.gc_refs != GC_UNTRACKED)
Tim Peters19b74c72002-07-01 03:52:19 +0000174#define IS_REACHABLE(o) ((AS_GC(o))->gc.gc_refs == GC_REACHABLE)
175#define IS_TENTATIVELY_UNREACHABLE(o) ( \
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000176 (AS_GC(o))->gc.gc_refs == GC_TENTATIVELY_UNREACHABLE)
Neil Schemenauera2b11ec2002-05-21 15:53:24 +0000177
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000178/*** list functions ***/
179
180static void
181gc_list_init(PyGC_Head *list)
182{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000183 list->gc.gc_prev = list;
184 list->gc.gc_next = list;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000185}
186
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000187static int
188gc_list_is_empty(PyGC_Head *list)
189{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000190 return (list->gc.gc_next == list);
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000191}
192
Tim Peterse2d59182004-11-01 01:39:08 +0000193#if 0
194/* This became unused after gc_list_move() was introduced. */
195/* Append `node` to `list`. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000196static void
197gc_list_append(PyGC_Head *node, PyGC_Head *list)
198{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000199 node->gc.gc_next = list;
200 node->gc.gc_prev = list->gc.gc_prev;
201 node->gc.gc_prev->gc.gc_next = node;
202 list->gc.gc_prev = node;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000203}
Tim Peterse2d59182004-11-01 01:39:08 +0000204#endif
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000205
Tim Peterse2d59182004-11-01 01:39:08 +0000206/* Remove `node` from the gc list it's currently in. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000207static void
208gc_list_remove(PyGC_Head *node)
209{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000210 node->gc.gc_prev->gc.gc_next = node->gc.gc_next;
211 node->gc.gc_next->gc.gc_prev = node->gc.gc_prev;
212 node->gc.gc_next = NULL; /* object is not currently tracked */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000213}
214
Tim Peterse2d59182004-11-01 01:39:08 +0000215/* Move `node` from the gc list it's currently in (which is not explicitly
216 * named here) to the end of `list`. This is semantically the same as
217 * gc_list_remove(node) followed by gc_list_append(node, list).
218 */
219static void
220gc_list_move(PyGC_Head *node, PyGC_Head *list)
221{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000222 PyGC_Head *new_prev;
223 PyGC_Head *current_prev = node->gc.gc_prev;
224 PyGC_Head *current_next = node->gc.gc_next;
225 /* Unlink from current list. */
226 current_prev->gc.gc_next = current_next;
227 current_next->gc.gc_prev = current_prev;
228 /* Relink at end of new list. */
229 new_prev = node->gc.gc_prev = list->gc.gc_prev;
230 new_prev->gc.gc_next = list->gc.gc_prev = node;
231 node->gc.gc_next = list;
Tim Peterse2d59182004-11-01 01:39:08 +0000232}
233
234/* append list `from` onto list `to`; `from` becomes an empty list */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000235static void
236gc_list_merge(PyGC_Head *from, PyGC_Head *to)
237{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000238 PyGC_Head *tail;
239 assert(from != to);
240 if (!gc_list_is_empty(from)) {
241 tail = to->gc.gc_prev;
242 tail->gc.gc_next = from->gc.gc_next;
243 tail->gc.gc_next->gc.gc_prev = tail;
244 to->gc.gc_prev = from->gc.gc_prev;
245 to->gc.gc_prev->gc.gc_next = to;
246 }
247 gc_list_init(from);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000248}
249
Neal Norwitz7b216c52006-03-04 20:01:53 +0000250static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000251gc_list_size(PyGC_Head *list)
252{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000253 PyGC_Head *gc;
254 Py_ssize_t n = 0;
255 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
256 n++;
257 }
258 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000259}
260
Tim Peters259272b2003-04-06 19:41:39 +0000261/* Append objects in a GC list to a Python list.
262 * Return 0 if all OK, < 0 if error (out of memory for list).
263 */
264static int
265append_objects(PyObject *py_list, PyGC_Head *gc_list)
266{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000267 PyGC_Head *gc;
268 for (gc = gc_list->gc.gc_next; gc != gc_list; gc = gc->gc.gc_next) {
269 PyObject *op = FROM_GC(gc);
270 if (op != py_list) {
271 if (PyList_Append(py_list, op)) {
272 return -1; /* exception */
273 }
274 }
275 }
276 return 0;
Tim Peters259272b2003-04-06 19:41:39 +0000277}
278
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000279/*** end of list stuff ***/
280
281
Tim Peters19b74c72002-07-01 03:52:19 +0000282/* Set all gc_refs = ob_refcnt. After this, gc_refs is > 0 for all objects
283 * in containers, and is GC_REACHABLE for all tracked gc objects not in
284 * containers.
Tim Peters88396172002-06-30 17:56:40 +0000285 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000286static void
287update_refs(PyGC_Head *containers)
288{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000289 PyGC_Head *gc = containers->gc.gc_next;
290 for (; gc != containers; gc = gc->gc.gc_next) {
291 assert(gc->gc.gc_refs == GC_REACHABLE);
292 gc->gc.gc_refs = Py_REFCNT(FROM_GC(gc));
293 /* Python's cyclic gc should never see an incoming refcount
294 * of 0: if something decref'ed to 0, it should have been
295 * deallocated immediately at that time.
296 * Possible cause (if the assert triggers): a tp_dealloc
297 * routine left a gc-aware object tracked during its teardown
298 * phase, and did something-- or allowed something to happen --
299 * that called back into Python. gc can trigger then, and may
300 * see the still-tracked dying object. Before this assert
301 * was added, such mistakes went on to allow gc to try to
302 * delete the object again. In a debug build, that caused
303 * a mysterious segfault, when _Py_ForgetReference tried
304 * to remove the object from the doubly-linked list of all
305 * objects a second time. In a release build, an actual
306 * double deallocation occurred, which leads to corruption
307 * of the allocator's internal bookkeeping pointers. That's
308 * so serious that maybe this should be a release-build
309 * check instead of an assert?
310 */
311 assert(gc->gc.gc_refs != 0);
312 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000313}
314
Tim Peters19b74c72002-07-01 03:52:19 +0000315/* A traversal callback for subtract_refs. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000316static int
317visit_decref(PyObject *op, void *data)
318{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000319 assert(op != NULL);
320 if (PyObject_IS_GC(op)) {
321 PyGC_Head *gc = AS_GC(op);
322 /* We're only interested in gc_refs for objects in the
323 * generation being collected, which can be recognized
324 * because only they have positive gc_refs.
325 */
326 assert(gc->gc.gc_refs != 0); /* else refcount was too small */
327 if (gc->gc.gc_refs > 0)
328 gc->gc.gc_refs--;
329 }
330 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000331}
332
Tim Peters19b74c72002-07-01 03:52:19 +0000333/* Subtract internal references from gc_refs. After this, gc_refs is >= 0
334 * for all objects in containers, and is GC_REACHABLE for all tracked gc
335 * objects not in containers. The ones with gc_refs > 0 are directly
336 * reachable from outside containers, and so can't be collected.
337 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000338static void
339subtract_refs(PyGC_Head *containers)
340{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000341 traverseproc traverse;
342 PyGC_Head *gc = containers->gc.gc_next;
343 for (; gc != containers; gc=gc->gc.gc_next) {
344 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
345 (void) traverse(FROM_GC(gc),
346 (visitproc)visit_decref,
347 NULL);
348 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000349}
350
Tim Peters19b74c72002-07-01 03:52:19 +0000351/* A traversal callback for move_unreachable. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000352static int
Tim Peters19b74c72002-07-01 03:52:19 +0000353visit_reachable(PyObject *op, PyGC_Head *reachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000354{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000355 if (PyObject_IS_GC(op)) {
356 PyGC_Head *gc = AS_GC(op);
357 const Py_ssize_t gc_refs = gc->gc.gc_refs;
Tim Peters19b74c72002-07-01 03:52:19 +0000358
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000359 if (gc_refs == 0) {
360 /* This is in move_unreachable's 'young' list, but
361 * the traversal hasn't yet gotten to it. All
362 * we need to do is tell move_unreachable that it's
363 * reachable.
364 */
365 gc->gc.gc_refs = 1;
366 }
367 else if (gc_refs == GC_TENTATIVELY_UNREACHABLE) {
368 /* This had gc_refs = 0 when move_unreachable got
369 * to it, but turns out it's reachable after all.
370 * Move it back to move_unreachable's 'young' list,
371 * and move_unreachable will eventually get to it
372 * again.
373 */
374 gc_list_move(gc, reachable);
375 gc->gc.gc_refs = 1;
376 }
377 /* Else there's nothing to do.
378 * If gc_refs > 0, it must be in move_unreachable's 'young'
379 * list, and move_unreachable will eventually get to it.
380 * If gc_refs == GC_REACHABLE, it's either in some other
381 * generation so we don't care about it, or move_unreachable
382 * already dealt with it.
383 * If gc_refs == GC_UNTRACKED, it must be ignored.
384 */
385 else {
386 assert(gc_refs > 0
387 || gc_refs == GC_REACHABLE
388 || gc_refs == GC_UNTRACKED);
389 }
390 }
391 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000392}
393
Tim Peters19b74c72002-07-01 03:52:19 +0000394/* Move the unreachable objects from young to unreachable. After this,
395 * all objects in young have gc_refs = GC_REACHABLE, and all objects in
396 * unreachable have gc_refs = GC_TENTATIVELY_UNREACHABLE. All tracked
397 * gc objects not in young or unreachable still have gc_refs = GC_REACHABLE.
398 * All objects in young after this are directly or indirectly reachable
399 * from outside the original young; and all objects in unreachable are
400 * not.
Tim Peters88396172002-06-30 17:56:40 +0000401 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000402static void
Tim Peters19b74c72002-07-01 03:52:19 +0000403move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000404{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000405 PyGC_Head *gc = young->gc.gc_next;
Tim Peters19b74c72002-07-01 03:52:19 +0000406
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000407 /* Invariants: all objects "to the left" of us in young have gc_refs
408 * = GC_REACHABLE, and are indeed reachable (directly or indirectly)
409 * from outside the young list as it was at entry. All other objects
410 * from the original young "to the left" of us are in unreachable now,
411 * and have gc_refs = GC_TENTATIVELY_UNREACHABLE. All objects to the
412 * left of us in 'young' now have been scanned, and no objects here
413 * or to the right have been scanned yet.
414 */
Tim Peters19b74c72002-07-01 03:52:19 +0000415
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000416 while (gc != young) {
417 PyGC_Head *next;
Tim Peters19b74c72002-07-01 03:52:19 +0000418
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000419 if (gc->gc.gc_refs) {
420 /* gc is definitely reachable from outside the
421 * original 'young'. Mark it as such, and traverse
422 * its pointers to find any other objects that may
423 * be directly reachable from it. Note that the
424 * call to tp_traverse may append objects to young,
425 * so we have to wait until it returns to determine
426 * the next object to visit.
427 */
428 PyObject *op = FROM_GC(gc);
429 traverseproc traverse = Py_TYPE(op)->tp_traverse;
430 assert(gc->gc.gc_refs > 0);
431 gc->gc.gc_refs = GC_REACHABLE;
432 (void) traverse(op,
433 (visitproc)visit_reachable,
434 (void *)young);
435 next = gc->gc.gc_next;
436 if (PyTuple_CheckExact(op)) {
437 _PyTuple_MaybeUntrack(op);
438 }
439 else if (PyDict_CheckExact(op)) {
440 _PyDict_MaybeUntrack(op);
441 }
442 }
443 else {
444 /* This *may* be unreachable. To make progress,
445 * assume it is. gc isn't directly reachable from
446 * any object we've already traversed, but may be
447 * reachable from an object we haven't gotten to yet.
448 * visit_reachable will eventually move gc back into
449 * young if that's so, and we'll see it again.
450 */
451 next = gc->gc.gc_next;
452 gc_list_move(gc, unreachable);
453 gc->gc.gc_refs = GC_TENTATIVELY_UNREACHABLE;
454 }
455 gc = next;
456 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000457}
458
Tim Peters86b993b2003-04-05 17:35:54 +0000459/* Return true if object has a finalization method.
460 * CAUTION: An instance of an old-style class has to be checked for a
Tim Petersf6b80452003-04-07 19:21:15 +0000461 *__del__ method, and earlier versions of this used to call PyObject_HasAttr,
462 * which in turn could call the class's __getattr__ hook (if any). That
463 * could invoke arbitrary Python code, mutating the object graph in arbitrary
464 * ways, and that was the source of some excruciatingly subtle bugs.
Tim Peters86b993b2003-04-05 17:35:54 +0000465 */
Neil Schemenauera765c122001-11-01 17:35:23 +0000466static int
467has_finalizer(PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000468{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000469 if (PyInstance_Check(op)) {
470 assert(delstr != NULL);
471 return _PyInstance_Lookup(op, delstr) != NULL;
472 }
473 else if (PyType_HasFeature(op->ob_type, Py_TPFLAGS_HEAPTYPE))
474 return op->ob_type->tp_del != NULL;
475 else if (PyGen_CheckExact(op))
476 return PyGen_NeedsFinalizing((PyGenObject *)op);
477 else
478 return 0;
Neil Schemenauera765c122001-11-01 17:35:23 +0000479}
480
Tim Petersead8b7a2004-10-30 23:09:22 +0000481/* Move the objects in unreachable with __del__ methods into `finalizers`.
482 * Objects moved into `finalizers` have gc_refs set to GC_REACHABLE; the
483 * objects remaining in unreachable are left at GC_TENTATIVELY_UNREACHABLE.
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000484 */
Neil Schemenauera765c122001-11-01 17:35:23 +0000485static void
Tim Petersead8b7a2004-10-30 23:09:22 +0000486move_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
Neil Schemenauera765c122001-11-01 17:35:23 +0000487{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000488 PyGC_Head *gc;
489 PyGC_Head *next;
Tim Petersf6b80452003-04-07 19:21:15 +0000490
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000491 /* March over unreachable. Move objects with finalizers into
492 * `finalizers`.
493 */
494 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
495 PyObject *op = FROM_GC(gc);
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000496
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000497 assert(IS_TENTATIVELY_UNREACHABLE(op));
498 next = gc->gc.gc_next;
Tim Petersf6ae7a42003-04-05 18:40:50 +0000499
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000500 if (has_finalizer(op)) {
501 gc_list_move(gc, finalizers);
502 gc->gc.gc_refs = GC_REACHABLE;
503 }
504 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000505}
506
Tim Peters19b74c72002-07-01 03:52:19 +0000507/* A traversal callback for move_finalizer_reachable. */
508static int
509visit_move(PyObject *op, PyGC_Head *tolist)
510{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000511 if (PyObject_IS_GC(op)) {
512 if (IS_TENTATIVELY_UNREACHABLE(op)) {
513 PyGC_Head *gc = AS_GC(op);
514 gc_list_move(gc, tolist);
515 gc->gc.gc_refs = GC_REACHABLE;
516 }
517 }
518 return 0;
Tim Peters19b74c72002-07-01 03:52:19 +0000519}
520
521/* Move objects that are reachable from finalizers, from the unreachable set
Tim Petersf6b80452003-04-07 19:21:15 +0000522 * into finalizers set.
Tim Peters19b74c72002-07-01 03:52:19 +0000523 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000524static void
Tim Petersf6b80452003-04-07 19:21:15 +0000525move_finalizer_reachable(PyGC_Head *finalizers)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000526{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000527 traverseproc traverse;
528 PyGC_Head *gc = finalizers->gc.gc_next;
529 for (; gc != finalizers; gc = gc->gc.gc_next) {
530 /* Note that the finalizers list may grow during this. */
531 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
532 (void) traverse(FROM_GC(gc),
533 (visitproc)visit_move,
534 (void *)finalizers);
535 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000536}
537
Tim Petersead8b7a2004-10-30 23:09:22 +0000538/* Clear all weakrefs to unreachable objects, and if such a weakref has a
539 * callback, invoke it if necessary. Note that it's possible for such
540 * weakrefs to be outside the unreachable set -- indeed, those are precisely
541 * the weakrefs whose callbacks must be invoked. See gc_weakref.txt for
542 * overview & some details. Some weakrefs with callbacks may be reclaimed
543 * directly by this routine; the number reclaimed is the return value. Other
544 * weakrefs with callbacks may be moved into the `old` generation. Objects
545 * moved into `old` have gc_refs set to GC_REACHABLE; the objects remaining in
546 * unreachable are left at GC_TENTATIVELY_UNREACHABLE. When this returns,
547 * no object in `unreachable` is weakly referenced anymore.
Tim Peters403a2032003-11-20 21:21:46 +0000548 */
549static int
Tim Petersead8b7a2004-10-30 23:09:22 +0000550handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
Tim Peters403a2032003-11-20 21:21:46 +0000551{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000552 PyGC_Head *gc;
553 PyObject *op; /* generally FROM_GC(gc) */
554 PyWeakReference *wr; /* generally a cast of op */
555 PyGC_Head wrcb_to_call; /* weakrefs with callbacks to call */
556 PyGC_Head *next;
557 int num_freed = 0;
Tim Peters403a2032003-11-20 21:21:46 +0000558
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000559 gc_list_init(&wrcb_to_call);
Tim Peters403a2032003-11-20 21:21:46 +0000560
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000561 /* Clear all weakrefs to the objects in unreachable. If such a weakref
562 * also has a callback, move it into `wrcb_to_call` if the callback
563 * needs to be invoked. Note that we cannot invoke any callbacks until
564 * all weakrefs to unreachable objects are cleared, lest the callback
565 * resurrect an unreachable object via a still-active weakref. We
566 * make another pass over wrcb_to_call, invoking callbacks, after this
567 * pass completes.
568 */
569 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
570 PyWeakReference **wrlist;
Tim Petersead8b7a2004-10-30 23:09:22 +0000571
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000572 op = FROM_GC(gc);
573 assert(IS_TENTATIVELY_UNREACHABLE(op));
574 next = gc->gc.gc_next;
Tim Petersead8b7a2004-10-30 23:09:22 +0000575
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000576 if (! PyType_SUPPORTS_WEAKREFS(Py_TYPE(op)))
577 continue;
Tim Petersead8b7a2004-10-30 23:09:22 +0000578
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000579 /* It supports weakrefs. Does it have any? */
580 wrlist = (PyWeakReference **)
581 PyObject_GET_WEAKREFS_LISTPTR(op);
Tim Petersead8b7a2004-10-30 23:09:22 +0000582
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000583 /* `op` may have some weakrefs. March over the list, clear
584 * all the weakrefs, and move the weakrefs with callbacks
585 * that must be called into wrcb_to_call.
586 */
587 for (wr = *wrlist; wr != NULL; wr = *wrlist) {
588 PyGC_Head *wrasgc; /* AS_GC(wr) */
Tim Petersead8b7a2004-10-30 23:09:22 +0000589
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000590 /* _PyWeakref_ClearRef clears the weakref but leaves
591 * the callback pointer intact. Obscure: it also
592 * changes *wrlist.
593 */
594 assert(wr->wr_object == op);
595 _PyWeakref_ClearRef(wr);
596 assert(wr->wr_object == Py_None);
597 if (wr->wr_callback == NULL)
598 continue; /* no callback */
Tim Petersead8b7a2004-10-30 23:09:22 +0000599
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000600 /* Headache time. `op` is going away, and is weakly referenced by
601 * `wr`, which has a callback. Should the callback be invoked? If wr
602 * is also trash, no:
603 *
604 * 1. There's no need to call it. The object and the weakref are
605 * both going away, so it's legitimate to pretend the weakref is
606 * going away first. The user has to ensure a weakref outlives its
607 * referent if they want a guarantee that the wr callback will get
608 * invoked.
609 *
610 * 2. It may be catastrophic to call it. If the callback is also in
611 * cyclic trash (CT), then although the CT is unreachable from
612 * outside the current generation, CT may be reachable from the
613 * callback. Then the callback could resurrect insane objects.
614 *
615 * Since the callback is never needed and may be unsafe in this case,
616 * wr is simply left in the unreachable set. Note that because we
617 * already called _PyWeakref_ClearRef(wr), its callback will never
618 * trigger.
619 *
620 * OTOH, if wr isn't part of CT, we should invoke the callback: the
621 * weakref outlived the trash. Note that since wr isn't CT in this
622 * case, its callback can't be CT either -- wr acted as an external
623 * root to this generation, and therefore its callback did too. So
624 * nothing in CT is reachable from the callback either, so it's hard
625 * to imagine how calling it later could create a problem for us. wr
626 * is moved to wrcb_to_call in this case.
627 */
628 if (IS_TENTATIVELY_UNREACHABLE(wr))
629 continue;
630 assert(IS_REACHABLE(wr));
Tim Peterscc2a8662004-10-31 22:12:43 +0000631
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000632 /* Create a new reference so that wr can't go away
633 * before we can process it again.
634 */
635 Py_INCREF(wr);
Tim Petersead8b7a2004-10-30 23:09:22 +0000636
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000637 /* Move wr to wrcb_to_call, for the next pass. */
638 wrasgc = AS_GC(wr);
639 assert(wrasgc != next); /* wrasgc is reachable, but
640 next isn't, so they can't
641 be the same */
642 gc_list_move(wrasgc, &wrcb_to_call);
643 }
644 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000645
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000646 /* Invoke the callbacks we decided to honor. It's safe to invoke them
647 * because they can't reference unreachable objects.
648 */
649 while (! gc_list_is_empty(&wrcb_to_call)) {
650 PyObject *temp;
651 PyObject *callback;
Tim Petersead8b7a2004-10-30 23:09:22 +0000652
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000653 gc = wrcb_to_call.gc.gc_next;
654 op = FROM_GC(gc);
655 assert(IS_REACHABLE(op));
656 assert(PyWeakref_Check(op));
657 wr = (PyWeakReference *)op;
658 callback = wr->wr_callback;
659 assert(callback != NULL);
Tim Petersead8b7a2004-10-30 23:09:22 +0000660
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000661 /* copy-paste of weakrefobject.c's handle_callback() */
662 temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
663 if (temp == NULL)
664 PyErr_WriteUnraisable(callback);
665 else
666 Py_DECREF(temp);
Tim Petersead8b7a2004-10-30 23:09:22 +0000667
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000668 /* Give up the reference we created in the first pass. When
669 * op's refcount hits 0 (which it may or may not do right now),
670 * op's tp_dealloc will decref op->wr_callback too. Note
671 * that the refcount probably will hit 0 now, and because this
672 * weakref was reachable to begin with, gc didn't already
673 * add it to its count of freed objects. Example: a reachable
674 * weak value dict maps some key to this reachable weakref.
675 * The callback removes this key->weakref mapping from the
676 * dict, leaving no other references to the weakref (excepting
677 * ours).
678 */
679 Py_DECREF(op);
680 if (wrcb_to_call.gc.gc_next == gc) {
681 /* object is still alive -- move it */
682 gc_list_move(gc, old);
683 }
684 else
685 ++num_freed;
686 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000687
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000688 return num_freed;
Tim Peters403a2032003-11-20 21:21:46 +0000689}
690
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000691static void
Jeremy Hylton06257772000-08-31 15:10:24 +0000692debug_instance(char *msg, PyInstanceObject *inst)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000693{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000694 char *cname;
695 /* simple version of instance_repr */
696 PyObject *classname = inst->in_class->cl_name;
697 if (classname != NULL && PyString_Check(classname))
698 cname = PyString_AsString(classname);
699 else
700 cname = "?";
701 PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n",
702 msg, cname, inst);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000703}
704
705static void
Jeremy Hylton06257772000-08-31 15:10:24 +0000706debug_cycle(char *msg, PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000707{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000708 if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) {
709 debug_instance(msg, (PyInstanceObject *)op);
710 }
711 else if (debug & DEBUG_OBJECTS) {
712 PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
713 msg, Py_TYPE(op)->tp_name, op);
714 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000715}
716
Tim Petersbf384c22003-04-06 00:11:39 +0000717/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
718 * only from such cycles).
Tim Petersf6b80452003-04-07 19:21:15 +0000719 * If DEBUG_SAVEALL, all objects in finalizers are appended to the module
720 * garbage list (a Python list), else only the objects in finalizers with
721 * __del__ methods are appended to garbage. All objects in finalizers are
722 * merged into the old list regardless.
Tim Peters259272b2003-04-06 19:41:39 +0000723 * Returns 0 if all OK, <0 on error (out of memory to grow the garbage list).
724 * The finalizers list is made empty on a successful return.
Tim Petersbf384c22003-04-06 00:11:39 +0000725 */
Tim Peters259272b2003-04-06 19:41:39 +0000726static int
Tim Petersf6b80452003-04-07 19:21:15 +0000727handle_finalizers(PyGC_Head *finalizers, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000728{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000729 PyGC_Head *gc = finalizers->gc.gc_next;
Tim Petersf6b80452003-04-07 19:21:15 +0000730
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000731 if (garbage == NULL) {
732 garbage = PyList_New(0);
733 if (garbage == NULL)
734 Py_FatalError("gc couldn't create gc.garbage list");
735 }
736 for (; gc != finalizers; gc = gc->gc.gc_next) {
737 PyObject *op = FROM_GC(gc);
Tim Petersf6b80452003-04-07 19:21:15 +0000738
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000739 if ((debug & DEBUG_SAVEALL) || has_finalizer(op)) {
740 if (PyList_Append(garbage, op) < 0)
741 return -1;
742 }
743 }
Tim Petersf6b80452003-04-07 19:21:15 +0000744
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000745 gc_list_merge(finalizers, old);
746 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000747}
748
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000749/* Break reference cycles by clearing the containers involved. This is
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000750 * tricky business as the lists can be changing and we don't know which
Tim Peters19b74c72002-07-01 03:52:19 +0000751 * objects may be freed. It is possible I screwed something up here.
752 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000753static void
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000754delete_garbage(PyGC_Head *collectable, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000755{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000756 inquiry clear;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000757
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000758 while (!gc_list_is_empty(collectable)) {
759 PyGC_Head *gc = collectable->gc.gc_next;
760 PyObject *op = FROM_GC(gc);
Tim Peters88396172002-06-30 17:56:40 +0000761
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000762 assert(IS_TENTATIVELY_UNREACHABLE(op));
763 if (debug & DEBUG_SAVEALL) {
764 PyList_Append(garbage, op);
765 }
766 else {
767 if ((clear = Py_TYPE(op)->tp_clear) != NULL) {
768 Py_INCREF(op);
769 clear(op);
770 Py_DECREF(op);
771 }
772 }
773 if (collectable->gc.gc_next == gc) {
774 /* object is still alive, move it, it may die later */
775 gc_list_move(gc, old);
776 gc->gc.gc_refs = GC_REACHABLE;
777 }
778 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000779}
780
Christian Heimes3b718a72008-02-14 12:47:33 +0000781/* Clear all free lists
782 * All free lists are cleared during the collection of the highest generation.
783 * Allocated items in the free list may keep a pymalloc arena occupied.
784 * Clearing the free lists may give back memory to the OS earlier.
785 */
786static void
787clear_freelists(void)
788{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000789 (void)PyMethod_ClearFreeList();
790 (void)PyFrame_ClearFreeList();
791 (void)PyCFunction_ClearFreeList();
792 (void)PyTuple_ClearFreeList();
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000793#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000794 (void)PyUnicode_ClearFreeList();
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000795#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000796 (void)PyInt_ClearFreeList();
797 (void)PyFloat_ClearFreeList();
Christian Heimes3b718a72008-02-14 12:47:33 +0000798}
799
Antoine Pitrou73c0e652008-12-17 22:46:54 +0000800static double
801get_time(void)
802{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000803 double result = 0;
804 if (tmod != NULL) {
805 PyObject *f = PyObject_CallMethod(tmod, "time", NULL);
806 if (f == NULL) {
807 PyErr_Clear();
808 }
809 else {
810 if (PyFloat_Check(f))
811 result = PyFloat_AsDouble(f);
812 Py_DECREF(f);
813 }
814 }
815 return result;
Antoine Pitrou73c0e652008-12-17 22:46:54 +0000816}
817
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000818/* This is the main function. Read this to understand how the
819 * collection process works. */
Neal Norwitz7b216c52006-03-04 20:01:53 +0000820static Py_ssize_t
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000821collect(int generation)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000822{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000823 int i;
824 Py_ssize_t m = 0; /* # objects collected */
825 Py_ssize_t n = 0; /* # unreachable objects that couldn't be collected */
826 PyGC_Head *young; /* the generation we are examining */
827 PyGC_Head *old; /* next older generation */
828 PyGC_Head unreachable; /* non-problematic unreachable trash */
829 PyGC_Head finalizers; /* objects with, & reachable from, __del__ */
830 PyGC_Head *gc;
831 double t1 = 0.0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000832
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000833 if (delstr == NULL) {
834 delstr = PyString_InternFromString("__del__");
835 if (delstr == NULL)
836 Py_FatalError("gc couldn't allocate \"__del__\"");
837 }
Tim Peters93ad66d2003-04-05 17:15:44 +0000838
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000839 if (debug & DEBUG_STATS) {
840 PySys_WriteStderr("gc: collecting generation %d...\n",
841 generation);
842 PySys_WriteStderr("gc: objects in each generation:");
843 for (i = 0; i < NUM_GENERATIONS; i++)
844 PySys_WriteStderr(" %" PY_FORMAT_SIZE_T "d",
845 gc_list_size(GEN_HEAD(i)));
846 t1 = get_time();
847 PySys_WriteStderr("\n");
848 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000849
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000850 /* update collection and allocation counters */
851 if (generation+1 < NUM_GENERATIONS)
852 generations[generation+1].count += 1;
853 for (i = 0; i <= generation; i++)
854 generations[i].count = 0;
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000855
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000856 /* merge younger generations with one we are currently collecting */
857 for (i = 0; i < generation; i++) {
858 gc_list_merge(GEN_HEAD(i), GEN_HEAD(generation));
859 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000860
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000861 /* handy references */
862 young = GEN_HEAD(generation);
863 if (generation < NUM_GENERATIONS-1)
864 old = GEN_HEAD(generation+1);
865 else
866 old = young;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000867
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000868 /* Using ob_refcnt and gc_refs, calculate which objects in the
869 * container set are reachable from outside the set (i.e., have a
870 * refcount greater than 0 when all the references within the
871 * set are taken into account).
872 */
873 update_refs(young);
874 subtract_refs(young);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000875
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000876 /* Leave everything reachable from outside young in young, and move
877 * everything else (in young) to unreachable.
878 * NOTE: This used to move the reachable objects into a reachable
879 * set instead. But most things usually turn out to be reachable,
880 * so it's more efficient to move the unreachable things.
881 */
882 gc_list_init(&unreachable);
883 move_unreachable(young, &unreachable);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000884
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000885 /* Move reachable objects to next generation. */
886 if (young != old) {
887 if (generation == NUM_GENERATIONS - 2) {
888 long_lived_pending += gc_list_size(young);
889 }
890 gc_list_merge(young, old);
891 }
892 else {
893 long_lived_pending = 0;
894 long_lived_total = gc_list_size(young);
895 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000896
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000897 /* All objects in unreachable are trash, but objects reachable from
898 * finalizers can't safely be deleted. Python programmers should take
899 * care not to create such things. For Python, finalizers means
900 * instance objects with __del__ methods. Weakrefs with callbacks
901 * can also call arbitrary Python code but they will be dealt with by
902 * handle_weakrefs().
903 */
904 gc_list_init(&finalizers);
905 move_finalizers(&unreachable, &finalizers);
906 /* finalizers contains the unreachable objects with a finalizer;
907 * unreachable objects reachable *from* those are also uncollectable,
908 * and we move those into the finalizers list too.
909 */
910 move_finalizer_reachable(&finalizers);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000911
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000912 /* Collect statistics on collectable objects found and print
913 * debugging information.
914 */
915 for (gc = unreachable.gc.gc_next; gc != &unreachable;
916 gc = gc->gc.gc_next) {
917 m++;
918 if (debug & DEBUG_COLLECTABLE) {
919 debug_cycle("collectable", FROM_GC(gc));
920 }
921 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000922
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000923 /* Clear weakrefs and invoke callbacks as necessary. */
924 m += handle_weakrefs(&unreachable, old);
Tim Petersead8b7a2004-10-30 23:09:22 +0000925
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000926 /* Call tp_clear on objects in the unreachable set. This will cause
927 * the reference cycles to be broken. It may also cause some objects
928 * in finalizers to be freed.
929 */
930 delete_garbage(&unreachable, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000931
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000932 /* Collect statistics on uncollectable objects found and print
933 * debugging information. */
934 for (gc = finalizers.gc.gc_next;
935 gc != &finalizers;
936 gc = gc->gc.gc_next) {
937 n++;
938 if (debug & DEBUG_UNCOLLECTABLE)
939 debug_cycle("uncollectable", FROM_GC(gc));
940 }
941 if (debug & DEBUG_STATS) {
942 double t2 = get_time();
943 if (m == 0 && n == 0)
944 PySys_WriteStderr("gc: done");
945 else
946 PySys_WriteStderr(
947 "gc: done, "
948 "%" PY_FORMAT_SIZE_T "d unreachable, "
949 "%" PY_FORMAT_SIZE_T "d uncollectable",
950 n+m, n);
951 if (t1 && t2) {
952 PySys_WriteStderr(", %.4fs elapsed", t2-t1);
953 }
954 PySys_WriteStderr(".\n");
955 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000956
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000957 /* Append instances in the uncollectable set to a Python
958 * reachable list of garbage. The programmer has to deal with
959 * this if they insist on creating this type of structure.
960 */
961 (void)handle_finalizers(&finalizers, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000962
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000963 /* Clear free list only during the collection of the highest
964 * generation */
965 if (generation == NUM_GENERATIONS-1) {
966 clear_freelists();
967 }
Christian Heimes3b718a72008-02-14 12:47:33 +0000968
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000969 if (PyErr_Occurred()) {
970 if (gc_str == NULL)
971 gc_str = PyString_FromString("garbage collection");
972 PyErr_WriteUnraisable(gc_str);
973 Py_FatalError("unexpected exception during garbage collection");
974 }
975 return n+m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000976}
977
Neal Norwitz7b216c52006-03-04 20:01:53 +0000978static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000979collect_generations(void)
980{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000981 int i;
982 Py_ssize_t n = 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000983
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000984 /* Find the oldest generation (highest numbered) where the count
985 * exceeds the threshold. Objects in the that generation and
986 * generations younger than it will be collected. */
987 for (i = NUM_GENERATIONS-1; i >= 0; i--) {
988 if (generations[i].count > generations[i].threshold) {
989 /* Avoid quadratic performance degradation in number
990 of tracked objects. See comments at the beginning
991 of this file, and issue #4074.
992 */
993 if (i == NUM_GENERATIONS - 1
994 && long_lived_pending < long_lived_total / 4)
995 continue;
996 n = collect(i);
997 break;
998 }
999 }
1000 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001001}
1002
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001003PyDoc_STRVAR(gc_enable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001004"enable() -> None\n"
1005"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001006"Enable automatic garbage collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001007
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001008static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001009gc_enable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001010{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001011 enabled = 1;
1012 Py_INCREF(Py_None);
1013 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001014}
1015
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001016PyDoc_STRVAR(gc_disable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001017"disable() -> None\n"
1018"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001019"Disable automatic garbage collection.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001020
1021static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001022gc_disable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001023{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001024 enabled = 0;
1025 Py_INCREF(Py_None);
1026 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001027}
1028
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001029PyDoc_STRVAR(gc_isenabled__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001030"isenabled() -> status\n"
1031"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001032"Returns true if automatic garbage collection is enabled.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001033
1034static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001035gc_isenabled(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001036{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001037 return PyBool_FromLong((long)enabled);
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001038}
1039
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040PyDoc_STRVAR(gc_collect__doc__,
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001041"collect([generation]) -> n\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001042"\n"
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001043"With no arguments, run a full collection. The optional argument\n"
1044"may be an integer specifying which generation to collect. A ValueError\n"
1045"is raised if the generation number is invalid.\n\n"
1046"The number of unreachable objects is returned.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001047
1048static PyObject *
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001049gc_collect(PyObject *self, PyObject *args, PyObject *kws)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001050{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001051 static char *keywords[] = {"generation", NULL};
1052 int genarg = NUM_GENERATIONS - 1;
1053 Py_ssize_t n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001054
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001055 if (!PyArg_ParseTupleAndKeywords(args, kws, "|i", keywords, &genarg))
1056 return NULL;
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001057
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001058 else if (genarg < 0 || genarg >= NUM_GENERATIONS) {
1059 PyErr_SetString(PyExc_ValueError, "invalid generation");
1060 return NULL;
1061 }
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001062
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001063 if (collecting)
1064 n = 0; /* already collecting, don't do anything */
1065 else {
1066 collecting = 1;
1067 n = collect(genarg);
1068 collecting = 0;
1069 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001070
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001071 return PyInt_FromSsize_t(n);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001072}
1073
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001074PyDoc_STRVAR(gc_set_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001075"set_debug(flags) -> None\n"
1076"\n"
1077"Set the garbage collection debugging flags. Debugging information is\n"
1078"written to sys.stderr.\n"
1079"\n"
1080"flags is an integer and can have the following bits turned on:\n"
1081"\n"
1082" DEBUG_STATS - Print statistics during collection.\n"
1083" DEBUG_COLLECTABLE - Print collectable objects found.\n"
1084" DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found.\n"
1085" DEBUG_INSTANCES - Print instance objects.\n"
1086" DEBUG_OBJECTS - Print objects other than instances.\n"
Neil Schemenauer544de1e2000-09-22 15:22:38 +00001087" DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them.\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001088" DEBUG_LEAK - Debug leaking programs (everything but STATS).\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001089
1090static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001091gc_set_debug(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001092{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001093 if (!PyArg_ParseTuple(args, "i:set_debug", &debug))
1094 return NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001095
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001096 Py_INCREF(Py_None);
1097 return Py_None;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001098}
1099
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001100PyDoc_STRVAR(gc_get_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001101"get_debug() -> flags\n"
1102"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001103"Get the garbage collection debugging flags.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001104
1105static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001106gc_get_debug(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001107{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001108 return Py_BuildValue("i", debug);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001109}
1110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001111PyDoc_STRVAR(gc_set_thresh__doc__,
Neal Norwitz2a47c0f2002-01-29 00:53:41 +00001112"set_threshold(threshold0, [threshold1, threshold2]) -> None\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001113"\n"
1114"Sets the collection thresholds. Setting threshold0 to zero disables\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001115"collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001116
1117static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001118gc_set_thresh(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001119{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001120 int i;
1121 if (!PyArg_ParseTuple(args, "i|ii:set_threshold",
1122 &generations[0].threshold,
1123 &generations[1].threshold,
1124 &generations[2].threshold))
1125 return NULL;
1126 for (i = 2; i < NUM_GENERATIONS; i++) {
1127 /* generations higher than 2 get the same threshold */
1128 generations[i].threshold = generations[2].threshold;
1129 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001130
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001131 Py_INCREF(Py_None);
1132 return Py_None;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001133}
1134
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001135PyDoc_STRVAR(gc_get_thresh__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001136"get_threshold() -> (threshold0, threshold1, threshold2)\n"
1137"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001138"Return the current collection thresholds\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001139
1140static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001141gc_get_thresh(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001142{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001143 return Py_BuildValue("(iii)",
1144 generations[0].threshold,
1145 generations[1].threshold,
1146 generations[2].threshold);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001147}
1148
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001149PyDoc_STRVAR(gc_get_count__doc__,
1150"get_count() -> (count0, count1, count2)\n"
1151"\n"
1152"Return the current collection counts\n");
1153
1154static PyObject *
1155gc_get_count(PyObject *self, PyObject *noargs)
1156{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001157 return Py_BuildValue("(iii)",
1158 generations[0].count,
1159 generations[1].count,
1160 generations[2].count);
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001161}
1162
Neil Schemenauer48c70342001-08-09 15:38:31 +00001163static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001164referrersvisit(PyObject* obj, PyObject *objs)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001165{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001166 Py_ssize_t i;
1167 for (i = 0; i < PyTuple_GET_SIZE(objs); i++)
1168 if (PyTuple_GET_ITEM(objs, i) == obj)
1169 return 1;
1170 return 0;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001171}
1172
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001173static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001174gc_referrers_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001175{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001176 PyGC_Head *gc;
1177 PyObject *obj;
1178 traverseproc traverse;
1179 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
1180 obj = FROM_GC(gc);
1181 traverse = Py_TYPE(obj)->tp_traverse;
1182 if (obj == objs || obj == resultlist)
1183 continue;
1184 if (traverse(obj, (visitproc)referrersvisit, objs)) {
1185 if (PyList_Append(resultlist, obj) < 0)
1186 return 0; /* error */
1187 }
1188 }
1189 return 1; /* no error */
Neil Schemenauer48c70342001-08-09 15:38:31 +00001190}
1191
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192PyDoc_STRVAR(gc_get_referrers__doc__,
Martin v. Löwis560da622001-11-24 09:24:51 +00001193"get_referrers(*objs) -> list\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001194Return the list of objects that directly refer to any of objs.");
Neil Schemenauer48c70342001-08-09 15:38:31 +00001195
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001196static PyObject *
Martin v. Löwis560da622001-11-24 09:24:51 +00001197gc_get_referrers(PyObject *self, PyObject *args)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001198{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001199 int i;
1200 PyObject *result = PyList_New(0);
1201 if (!result) return NULL;
Georg Brandl5c170fd2006-03-17 19:03:25 +00001202
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001203 for (i = 0; i < NUM_GENERATIONS; i++) {
1204 if (!(gc_referrers_for(args, GEN_HEAD(i), result))) {
1205 Py_DECREF(result);
1206 return NULL;
1207 }
1208 }
1209 return result;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001210}
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001211
Tim Peters0f81ab62003-04-08 16:39:48 +00001212/* Append obj to list; return true if error (out of memory), false if OK. */
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001213static int
Tim Peters730f5532003-04-08 17:17:17 +00001214referentsvisit(PyObject *obj, PyObject *list)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001215{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001216 return PyList_Append(list, obj) < 0;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001217}
1218
Tim Peters730f5532003-04-08 17:17:17 +00001219PyDoc_STRVAR(gc_get_referents__doc__,
1220"get_referents(*objs) -> list\n\
Jeremy Hylton059b0942003-04-03 16:29:13 +00001221Return the list of objects that are directly referred to by objs.");
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001222
1223static PyObject *
Tim Peters730f5532003-04-08 17:17:17 +00001224gc_get_referents(PyObject *self, PyObject *args)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001225{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001226 Py_ssize_t i;
1227 PyObject *result = PyList_New(0);
Tim Peters0f81ab62003-04-08 16:39:48 +00001228
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001229 if (result == NULL)
1230 return NULL;
Tim Peters0f81ab62003-04-08 16:39:48 +00001231
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001232 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
1233 traverseproc traverse;
1234 PyObject *obj = PyTuple_GET_ITEM(args, i);
Tim Peters0f81ab62003-04-08 16:39:48 +00001235
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001236 if (! PyObject_IS_GC(obj))
1237 continue;
1238 traverse = Py_TYPE(obj)->tp_traverse;
1239 if (! traverse)
1240 continue;
1241 if (traverse(obj, (visitproc)referentsvisit, result)) {
1242 Py_DECREF(result);
1243 return NULL;
1244 }
1245 }
1246 return result;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001247}
1248
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001249PyDoc_STRVAR(gc_get_objects__doc__,
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001250"get_objects() -> [...]\n"
1251"\n"
1252"Return a list of objects tracked by the collector (excluding the list\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001253"returned).\n");
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001254
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001255static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001256gc_get_objects(PyObject *self, PyObject *noargs)
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001257{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001258 int i;
1259 PyObject* result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001260
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001261 result = PyList_New(0);
1262 if (result == NULL)
1263 return NULL;
1264 for (i = 0; i < NUM_GENERATIONS; i++) {
1265 if (append_objects(result, GEN_HEAD(i))) {
1266 Py_DECREF(result);
1267 return NULL;
1268 }
1269 }
1270 return result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001271}
1272
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001273PyDoc_STRVAR(gc_is_tracked__doc__,
1274"is_tracked(obj) -> bool\n"
1275"\n"
1276"Returns true if the object is tracked by the garbage collector.\n"
1277"Simple atomic objects will return false.\n"
1278);
1279
1280static PyObject *
1281gc_is_tracked(PyObject *self, PyObject *obj)
1282{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 PyObject *result;
1284
1285 if (PyObject_IS_GC(obj) && IS_TRACKED(obj))
1286 result = Py_True;
1287 else
1288 result = Py_False;
1289 Py_INCREF(result);
1290 return result;
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001291}
1292
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001293
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001294PyDoc_STRVAR(gc__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001295"This module provides access to the garbage collector for reference cycles.\n"
1296"\n"
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001297"enable() -- Enable automatic garbage collection.\n"
1298"disable() -- Disable automatic garbage collection.\n"
1299"isenabled() -- Returns true if automatic collection is enabled.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001300"collect() -- Do a full collection right now.\n"
Barry Warsawe5ec6132006-10-09 19:43:24 +00001301"get_count() -- Return the current collection counts.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001302"set_debug() -- Set debugging flags.\n"
1303"get_debug() -- Get debugging flags.\n"
1304"set_threshold() -- Set the collection thresholds.\n"
1305"get_threshold() -- Return the current the collection thresholds.\n"
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001306"get_objects() -- Return a list of all objects tracked by the collector.\n"
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001307"is_tracked() -- Returns true if a given object is tracked.\n"
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001308"get_referrers() -- Return the list of objects that refer to an object.\n"
Tim Peters730f5532003-04-08 17:17:17 +00001309"get_referents() -- Return the list of objects that an object refers to.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001310
1311static PyMethodDef GcMethods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001312 {"enable", gc_enable, METH_NOARGS, gc_enable__doc__},
1313 {"disable", gc_disable, METH_NOARGS, gc_disable__doc__},
1314 {"isenabled", gc_isenabled, METH_NOARGS, gc_isenabled__doc__},
1315 {"set_debug", gc_set_debug, METH_VARARGS, gc_set_debug__doc__},
1316 {"get_debug", gc_get_debug, METH_NOARGS, gc_get_debug__doc__},
1317 {"get_count", gc_get_count, METH_NOARGS, gc_get_count__doc__},
1318 {"set_threshold", gc_set_thresh, METH_VARARGS, gc_set_thresh__doc__},
1319 {"get_threshold", gc_get_thresh, METH_NOARGS, gc_get_thresh__doc__},
1320 {"collect", (PyCFunction)gc_collect,
1321 METH_VARARGS | METH_KEYWORDS, gc_collect__doc__},
1322 {"get_objects", gc_get_objects,METH_NOARGS, gc_get_objects__doc__},
1323 {"is_tracked", gc_is_tracked, METH_O, gc_is_tracked__doc__},
1324 {"get_referrers", gc_get_referrers, METH_VARARGS,
1325 gc_get_referrers__doc__},
1326 {"get_referents", gc_get_referents, METH_VARARGS,
1327 gc_get_referents__doc__},
1328 {NULL, NULL} /* Sentinel */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001329};
1330
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001331PyMODINIT_FUNC
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001332initgc(void)
1333{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001334 PyObject *m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001335
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001336 m = Py_InitModule4("gc",
1337 GcMethods,
1338 gc__doc__,
1339 NULL,
1340 PYTHON_API_VERSION);
1341 if (m == NULL)
1342 return;
Tim Peters11558872003-04-06 23:30:52 +00001343
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001344 if (garbage == NULL) {
1345 garbage = PyList_New(0);
1346 if (garbage == NULL)
1347 return;
1348 }
1349 Py_INCREF(garbage);
1350 if (PyModule_AddObject(m, "garbage", garbage) < 0)
1351 return;
Neal Norwitz57a03612006-04-26 05:34:03 +00001352
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001353 /* Importing can't be done in collect() because collect()
1354 * can be called via PyGC_Collect() in Py_Finalize().
1355 * This wouldn't be a problem, except that <initialized> is
1356 * reset to 0 before calling collect which trips up
1357 * the import and triggers an assertion.
1358 */
1359 if (tmod == NULL) {
1360 tmod = PyImport_ImportModuleNoBlock("time");
1361 if (tmod == NULL)
1362 PyErr_Clear();
1363 }
Neal Norwitz57a03612006-04-26 05:34:03 +00001364
Tim Peters11558872003-04-06 23:30:52 +00001365#define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) return
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001366 ADD_INT(DEBUG_STATS);
1367 ADD_INT(DEBUG_COLLECTABLE);
1368 ADD_INT(DEBUG_UNCOLLECTABLE);
1369 ADD_INT(DEBUG_INSTANCES);
1370 ADD_INT(DEBUG_OBJECTS);
1371 ADD_INT(DEBUG_SAVEALL);
1372 ADD_INT(DEBUG_LEAK);
Tim Peters11558872003-04-06 23:30:52 +00001373#undef ADD_INT
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001374}
1375
Guido van Rossume13ddc92003-04-17 17:29:22 +00001376/* API to invoke gc.collect() from C */
Neal Norwitz7b216c52006-03-04 20:01:53 +00001377Py_ssize_t
Guido van Rossume13ddc92003-04-17 17:29:22 +00001378PyGC_Collect(void)
1379{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001380 Py_ssize_t n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001381
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001382 if (collecting)
1383 n = 0; /* already collecting, don't do anything */
1384 else {
1385 collecting = 1;
1386 n = collect(NUM_GENERATIONS - 1);
1387 collecting = 0;
1388 }
Guido van Rossume13ddc92003-04-17 17:29:22 +00001389
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001390 return n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001391}
1392
Neil Schemenauer43411b52001-08-30 00:05:51 +00001393/* for debugging */
Guido van Rossume13ddc92003-04-17 17:29:22 +00001394void
1395_PyGC_Dump(PyGC_Head *g)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001396{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001397 _PyObject_Dump(FROM_GC(g));
Neil Schemenauer43411b52001-08-30 00:05:51 +00001398}
1399
Neil Schemenauer43411b52001-08-30 00:05:51 +00001400/* extension modules might be compiled with GC support so these
1401 functions must always be available */
1402
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001403#undef PyObject_GC_Track
1404#undef PyObject_GC_UnTrack
1405#undef PyObject_GC_Del
1406#undef _PyObject_GC_Malloc
1407
Neil Schemenauer43411b52001-08-30 00:05:51 +00001408void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001409PyObject_GC_Track(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001410{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001411 _PyObject_GC_TRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001412}
1413
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001414/* for binary compatibility with 2.2 */
Neil Schemenauer43411b52001-08-30 00:05:51 +00001415void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001416_PyObject_GC_Track(PyObject *op)
1417{
1418 PyObject_GC_Track(op);
1419}
1420
1421void
1422PyObject_GC_UnTrack(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001423{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001424 /* Obscure: the Py_TRASHCAN mechanism requires that we be able to
1425 * call PyObject_GC_UnTrack twice on an object.
1426 */
1427 if (IS_TRACKED(op))
1428 _PyObject_GC_UNTRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001429}
1430
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001431/* for binary compatibility with 2.2 */
1432void
1433_PyObject_GC_UnTrack(PyObject *op)
1434{
1435 PyObject_GC_UnTrack(op);
1436}
1437
Neil Schemenauer43411b52001-08-30 00:05:51 +00001438PyObject *
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001439_PyObject_GC_Malloc(size_t basicsize)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001440{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001441 PyObject *op;
1442 PyGC_Head *g;
1443 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1444 return PyErr_NoMemory();
1445 g = (PyGC_Head *)PyObject_MALLOC(
1446 sizeof(PyGC_Head) + basicsize);
1447 if (g == NULL)
1448 return PyErr_NoMemory();
1449 g->gc.gc_refs = GC_UNTRACKED;
1450 generations[0].count++; /* number of allocated GC objects */
1451 if (generations[0].count > generations[0].threshold &&
1452 enabled &&
1453 generations[0].threshold &&
1454 !collecting &&
1455 !PyErr_Occurred()) {
1456 collecting = 1;
1457 collect_generations();
1458 collecting = 0;
1459 }
1460 op = FROM_GC(g);
1461 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001462}
1463
1464PyObject *
1465_PyObject_GC_New(PyTypeObject *tp)
1466{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001467 PyObject *op = _PyObject_GC_Malloc(_PyObject_SIZE(tp));
1468 if (op != NULL)
1469 op = PyObject_INIT(op, tp);
1470 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001471}
1472
1473PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001474_PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001475{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001476 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
1477 PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
1478 if (op != NULL)
1479 op = PyObject_INIT_VAR(op, tp, nitems);
1480 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001481}
1482
1483PyVarObject *
Martin v. Löwis41290682006-02-16 14:56:14 +00001484_PyObject_GC_Resize(PyVarObject *op, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001485{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001486 const size_t basicsize = _PyObject_VAR_SIZE(Py_TYPE(op), nitems);
1487 PyGC_Head *g = AS_GC(op);
1488 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1489 return (PyVarObject *)PyErr_NoMemory();
1490 g = (PyGC_Head *)PyObject_REALLOC(g, sizeof(PyGC_Head) + basicsize);
1491 if (g == NULL)
1492 return (PyVarObject *)PyErr_NoMemory();
1493 op = (PyVarObject *) FROM_GC(g);
1494 Py_SIZE(op) = nitems;
1495 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001496}
1497
1498void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001499PyObject_GC_Del(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001500{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001501 PyGC_Head *g = AS_GC(op);
1502 if (IS_TRACKED(op))
1503 gc_list_remove(g);
1504 if (generations[0].count > 0) {
1505 generations[0].count--;
1506 }
1507 PyObject_FREE(g);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001508}
1509
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001510/* for binary compatibility with 2.2 */
1511#undef _PyObject_GC_Del
1512void
1513_PyObject_GC_Del(PyObject *op)
1514{
1515 PyObject_GC_Del(op);
1516}