blob: 81344ca828c30309377020cfa101a41cb4f818d3 [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
Antoine Pitrouff0e22b2012-05-28 22:22:34 +0200114/*
115 NOTE: about untracking of mutable objects.
116
117 Certain types of container cannot participate in a reference cycle, and
118 so do not need to be tracked by the garbage collector. Untracking these
119 objects reduces the cost of garbage collections. However, determining
120 which objects may be untracked is not free, and the costs must be
121 weighed against the benefits for garbage collection.
122
123 There are two possible strategies for when to untrack a container:
124
125 i) When the container is created.
126 ii) When the container is examined by the garbage collector.
127
128 Tuples containing only immutable objects (integers, strings etc, and
129 recursively, tuples of immutable objects) do not need to be tracked.
130 The interpreter creates a large number of tuples, many of which will
131 not survive until garbage collection. It is therefore not worthwhile
132 to untrack eligible tuples at creation time.
133
134 Instead, all tuples except the empty tuple are tracked when created.
135 During garbage collection it is determined whether any surviving tuples
136 can be untracked. A tuple can be untracked if all of its contents are
137 already not tracked. Tuples are examined for untracking in all garbage
138 collection cycles. It may take more than one cycle to untrack a tuple.
139
140 Dictionaries containing only immutable objects also do not need to be
141 tracked. Dictionaries are untracked when created. If a tracked item is
142 inserted into a dictionary (either as a key or value), the dictionary
143 becomes tracked. During a full garbage collection (all generations),
144 the collector will untrack any dictionaries whose contents are not
145 tracked.
146
147 The module provides the python function is_tracked(obj), which returns
148 the CURRENT tracking status of the object. Subsequent garbage
149 collections may change the tracking status of the object.
150
151 Untracking of certain containers was introduced in issue #4688, and
152 the algorithm was refined in response to issue #14775.
153*/
Antoine Pitrou4c5ecb72009-01-09 21:40:55 +0000154
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000155/* set for debugging information */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000156#define DEBUG_STATS (1<<0) /* print collection statistics */
157#define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */
158#define DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */
159#define DEBUG_INSTANCES (1<<3) /* print instances */
160#define DEBUG_OBJECTS (1<<4) /* print other objects */
161#define DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */
162#define DEBUG_LEAK DEBUG_COLLECTABLE | \
163 DEBUG_UNCOLLECTABLE | \
164 DEBUG_INSTANCES | \
165 DEBUG_OBJECTS | \
166 DEBUG_SAVEALL
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000167static int debug;
Neal Norwitz57a03612006-04-26 05:34:03 +0000168static PyObject *tmod = NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000169
Tim Peters6fc13d92002-07-02 18:12:35 +0000170/*--------------------------------------------------------------------------
171gc_refs values.
Neil Schemenauer43411b52001-08-30 00:05:51 +0000172
Tim Peters6fc13d92002-07-02 18:12:35 +0000173Between collections, every gc'ed object has one of two gc_refs values:
174
175GC_UNTRACKED
176 The initial state; objects returned by PyObject_GC_Malloc are in this
177 state. The object doesn't live in any generation list, and its
178 tp_traverse slot must not be called.
179
180GC_REACHABLE
181 The object lives in some generation list, and its tp_traverse is safe to
182 call. An object transitions to GC_REACHABLE when PyObject_GC_Track
183 is called.
184
185During a collection, gc_refs can temporarily take on other states:
186
187>= 0
188 At the start of a collection, update_refs() copies the true refcount
189 to gc_refs, for each object in the generation being collected.
190 subtract_refs() then adjusts gc_refs so that it equals the number of
191 times an object is referenced directly from outside the generation
192 being collected.
Martin v. Löwis774348c2002-11-09 19:54:06 +0000193 gc_refs remains >= 0 throughout these steps.
Tim Peters6fc13d92002-07-02 18:12:35 +0000194
195GC_TENTATIVELY_UNREACHABLE
196 move_unreachable() then moves objects not reachable (whether directly or
197 indirectly) from outside the generation into an "unreachable" set.
198 Objects that are found to be reachable have gc_refs set to GC_REACHABLE
199 again. Objects that are found to be unreachable have gc_refs set to
200 GC_TENTATIVELY_UNREACHABLE. It's "tentatively" because the pass doing
201 this can't be sure until it ends, and GC_TENTATIVELY_UNREACHABLE may
202 transition back to GC_REACHABLE.
203
204 Only objects with GC_TENTATIVELY_UNREACHABLE still set are candidates
205 for collection. If it's decided not to collect such an object (e.g.,
206 it has a __del__ method), its gc_refs is restored to GC_REACHABLE again.
207----------------------------------------------------------------------------
208*/
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000209#define GC_UNTRACKED _PyGC_REFS_UNTRACKED
210#define GC_REACHABLE _PyGC_REFS_REACHABLE
211#define GC_TENTATIVELY_UNREACHABLE _PyGC_REFS_TENTATIVELY_UNREACHABLE
Tim Peters19b74c72002-07-01 03:52:19 +0000212
Tim Peters6fc13d92002-07-02 18:12:35 +0000213#define IS_TRACKED(o) ((AS_GC(o))->gc.gc_refs != GC_UNTRACKED)
Tim Peters19b74c72002-07-01 03:52:19 +0000214#define IS_REACHABLE(o) ((AS_GC(o))->gc.gc_refs == GC_REACHABLE)
215#define IS_TENTATIVELY_UNREACHABLE(o) ( \
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000216 (AS_GC(o))->gc.gc_refs == GC_TENTATIVELY_UNREACHABLE)
Neil Schemenauera2b11ec2002-05-21 15:53:24 +0000217
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000218/*** list functions ***/
219
220static void
221gc_list_init(PyGC_Head *list)
222{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000223 list->gc.gc_prev = list;
224 list->gc.gc_next = list;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000225}
226
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000227static int
228gc_list_is_empty(PyGC_Head *list)
229{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000230 return (list->gc.gc_next == list);
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000231}
232
Tim Peterse2d59182004-11-01 01:39:08 +0000233#if 0
234/* This became unused after gc_list_move() was introduced. */
235/* Append `node` to `list`. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000236static void
237gc_list_append(PyGC_Head *node, PyGC_Head *list)
238{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000239 node->gc.gc_next = list;
240 node->gc.gc_prev = list->gc.gc_prev;
241 node->gc.gc_prev->gc.gc_next = node;
242 list->gc.gc_prev = node;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000243}
Tim Peterse2d59182004-11-01 01:39:08 +0000244#endif
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000245
Tim Peterse2d59182004-11-01 01:39:08 +0000246/* Remove `node` from the gc list it's currently in. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000247static void
248gc_list_remove(PyGC_Head *node)
249{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000250 node->gc.gc_prev->gc.gc_next = node->gc.gc_next;
251 node->gc.gc_next->gc.gc_prev = node->gc.gc_prev;
252 node->gc.gc_next = NULL; /* object is not currently tracked */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000253}
254
Tim Peterse2d59182004-11-01 01:39:08 +0000255/* Move `node` from the gc list it's currently in (which is not explicitly
256 * named here) to the end of `list`. This is semantically the same as
257 * gc_list_remove(node) followed by gc_list_append(node, list).
258 */
259static void
260gc_list_move(PyGC_Head *node, PyGC_Head *list)
261{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000262 PyGC_Head *new_prev;
263 PyGC_Head *current_prev = node->gc.gc_prev;
264 PyGC_Head *current_next = node->gc.gc_next;
265 /* Unlink from current list. */
266 current_prev->gc.gc_next = current_next;
267 current_next->gc.gc_prev = current_prev;
268 /* Relink at end of new list. */
269 new_prev = node->gc.gc_prev = list->gc.gc_prev;
270 new_prev->gc.gc_next = list->gc.gc_prev = node;
271 node->gc.gc_next = list;
Tim Peterse2d59182004-11-01 01:39:08 +0000272}
273
274/* append list `from` onto list `to`; `from` becomes an empty list */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000275static void
276gc_list_merge(PyGC_Head *from, PyGC_Head *to)
277{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000278 PyGC_Head *tail;
279 assert(from != to);
280 if (!gc_list_is_empty(from)) {
281 tail = to->gc.gc_prev;
282 tail->gc.gc_next = from->gc.gc_next;
283 tail->gc.gc_next->gc.gc_prev = tail;
284 to->gc.gc_prev = from->gc.gc_prev;
285 to->gc.gc_prev->gc.gc_next = to;
286 }
287 gc_list_init(from);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000288}
289
Neal Norwitz7b216c52006-03-04 20:01:53 +0000290static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000291gc_list_size(PyGC_Head *list)
292{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000293 PyGC_Head *gc;
294 Py_ssize_t n = 0;
295 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
296 n++;
297 }
298 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000299}
300
Tim Peters259272b2003-04-06 19:41:39 +0000301/* Append objects in a GC list to a Python list.
302 * Return 0 if all OK, < 0 if error (out of memory for list).
303 */
304static int
305append_objects(PyObject *py_list, PyGC_Head *gc_list)
306{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000307 PyGC_Head *gc;
308 for (gc = gc_list->gc.gc_next; gc != gc_list; gc = gc->gc.gc_next) {
309 PyObject *op = FROM_GC(gc);
310 if (op != py_list) {
311 if (PyList_Append(py_list, op)) {
312 return -1; /* exception */
313 }
314 }
315 }
316 return 0;
Tim Peters259272b2003-04-06 19:41:39 +0000317}
318
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000319/*** end of list stuff ***/
320
321
Tim Peters19b74c72002-07-01 03:52:19 +0000322/* Set all gc_refs = ob_refcnt. After this, gc_refs is > 0 for all objects
323 * in containers, and is GC_REACHABLE for all tracked gc objects not in
324 * containers.
Tim Peters88396172002-06-30 17:56:40 +0000325 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000326static void
327update_refs(PyGC_Head *containers)
328{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000329 PyGC_Head *gc = containers->gc.gc_next;
330 for (; gc != containers; gc = gc->gc.gc_next) {
331 assert(gc->gc.gc_refs == GC_REACHABLE);
332 gc->gc.gc_refs = Py_REFCNT(FROM_GC(gc));
333 /* Python's cyclic gc should never see an incoming refcount
334 * of 0: if something decref'ed to 0, it should have been
335 * deallocated immediately at that time.
336 * Possible cause (if the assert triggers): a tp_dealloc
337 * routine left a gc-aware object tracked during its teardown
338 * phase, and did something-- or allowed something to happen --
339 * that called back into Python. gc can trigger then, and may
340 * see the still-tracked dying object. Before this assert
341 * was added, such mistakes went on to allow gc to try to
342 * delete the object again. In a debug build, that caused
343 * a mysterious segfault, when _Py_ForgetReference tried
344 * to remove the object from the doubly-linked list of all
345 * objects a second time. In a release build, an actual
346 * double deallocation occurred, which leads to corruption
347 * of the allocator's internal bookkeeping pointers. That's
348 * so serious that maybe this should be a release-build
349 * check instead of an assert?
350 */
351 assert(gc->gc.gc_refs != 0);
352 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000353}
354
Tim Peters19b74c72002-07-01 03:52:19 +0000355/* A traversal callback for subtract_refs. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000356static int
357visit_decref(PyObject *op, void *data)
358{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000359 assert(op != NULL);
360 if (PyObject_IS_GC(op)) {
361 PyGC_Head *gc = AS_GC(op);
362 /* We're only interested in gc_refs for objects in the
363 * generation being collected, which can be recognized
364 * because only they have positive gc_refs.
365 */
366 assert(gc->gc.gc_refs != 0); /* else refcount was too small */
367 if (gc->gc.gc_refs > 0)
368 gc->gc.gc_refs--;
369 }
370 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000371}
372
Tim Peters19b74c72002-07-01 03:52:19 +0000373/* Subtract internal references from gc_refs. After this, gc_refs is >= 0
374 * for all objects in containers, and is GC_REACHABLE for all tracked gc
375 * objects not in containers. The ones with gc_refs > 0 are directly
376 * reachable from outside containers, and so can't be collected.
377 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000378static void
379subtract_refs(PyGC_Head *containers)
380{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000381 traverseproc traverse;
382 PyGC_Head *gc = containers->gc.gc_next;
383 for (; gc != containers; gc=gc->gc.gc_next) {
384 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
385 (void) traverse(FROM_GC(gc),
386 (visitproc)visit_decref,
387 NULL);
388 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000389}
390
Tim Peters19b74c72002-07-01 03:52:19 +0000391/* A traversal callback for move_unreachable. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000392static int
Tim Peters19b74c72002-07-01 03:52:19 +0000393visit_reachable(PyObject *op, PyGC_Head *reachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000394{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000395 if (PyObject_IS_GC(op)) {
396 PyGC_Head *gc = AS_GC(op);
397 const Py_ssize_t gc_refs = gc->gc.gc_refs;
Tim Peters19b74c72002-07-01 03:52:19 +0000398
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000399 if (gc_refs == 0) {
400 /* This is in move_unreachable's 'young' list, but
401 * the traversal hasn't yet gotten to it. All
402 * we need to do is tell move_unreachable that it's
403 * reachable.
404 */
405 gc->gc.gc_refs = 1;
406 }
407 else if (gc_refs == GC_TENTATIVELY_UNREACHABLE) {
408 /* This had gc_refs = 0 when move_unreachable got
409 * to it, but turns out it's reachable after all.
410 * Move it back to move_unreachable's 'young' list,
411 * and move_unreachable will eventually get to it
412 * again.
413 */
414 gc_list_move(gc, reachable);
415 gc->gc.gc_refs = 1;
416 }
417 /* Else there's nothing to do.
418 * If gc_refs > 0, it must be in move_unreachable's 'young'
419 * list, and move_unreachable will eventually get to it.
420 * If gc_refs == GC_REACHABLE, it's either in some other
421 * generation so we don't care about it, or move_unreachable
422 * already dealt with it.
423 * If gc_refs == GC_UNTRACKED, it must be ignored.
424 */
425 else {
426 assert(gc_refs > 0
427 || gc_refs == GC_REACHABLE
428 || gc_refs == GC_UNTRACKED);
429 }
430 }
431 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000432}
433
Tim Peters19b74c72002-07-01 03:52:19 +0000434/* Move the unreachable objects from young to unreachable. After this,
435 * all objects in young have gc_refs = GC_REACHABLE, and all objects in
436 * unreachable have gc_refs = GC_TENTATIVELY_UNREACHABLE. All tracked
437 * gc objects not in young or unreachable still have gc_refs = GC_REACHABLE.
438 * All objects in young after this are directly or indirectly reachable
439 * from outside the original young; and all objects in unreachable are
440 * not.
Tim Peters88396172002-06-30 17:56:40 +0000441 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000442static void
Tim Peters19b74c72002-07-01 03:52:19 +0000443move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000444{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000445 PyGC_Head *gc = young->gc.gc_next;
Tim Peters19b74c72002-07-01 03:52:19 +0000446
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000447 /* Invariants: all objects "to the left" of us in young have gc_refs
448 * = GC_REACHABLE, and are indeed reachable (directly or indirectly)
449 * from outside the young list as it was at entry. All other objects
450 * from the original young "to the left" of us are in unreachable now,
451 * and have gc_refs = GC_TENTATIVELY_UNREACHABLE. All objects to the
452 * left of us in 'young' now have been scanned, and no objects here
453 * or to the right have been scanned yet.
454 */
Tim Peters19b74c72002-07-01 03:52:19 +0000455
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000456 while (gc != young) {
457 PyGC_Head *next;
Tim Peters19b74c72002-07-01 03:52:19 +0000458
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000459 if (gc->gc.gc_refs) {
460 /* gc is definitely reachable from outside the
461 * original 'young'. Mark it as such, and traverse
462 * its pointers to find any other objects that may
463 * be directly reachable from it. Note that the
464 * call to tp_traverse may append objects to young,
465 * so we have to wait until it returns to determine
466 * the next object to visit.
467 */
468 PyObject *op = FROM_GC(gc);
469 traverseproc traverse = Py_TYPE(op)->tp_traverse;
470 assert(gc->gc.gc_refs > 0);
471 gc->gc.gc_refs = GC_REACHABLE;
472 (void) traverse(op,
473 (visitproc)visit_reachable,
474 (void *)young);
475 next = gc->gc.gc_next;
476 if (PyTuple_CheckExact(op)) {
477 _PyTuple_MaybeUntrack(op);
478 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000479 }
480 else {
481 /* This *may* be unreachable. To make progress,
482 * assume it is. gc isn't directly reachable from
483 * any object we've already traversed, but may be
484 * reachable from an object we haven't gotten to yet.
485 * visit_reachable will eventually move gc back into
486 * young if that's so, and we'll see it again.
487 */
488 next = gc->gc.gc_next;
489 gc_list_move(gc, unreachable);
490 gc->gc.gc_refs = GC_TENTATIVELY_UNREACHABLE;
491 }
492 gc = next;
493 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000494}
495
Tim Peters86b993b2003-04-05 17:35:54 +0000496/* Return true if object has a finalization method.
497 * CAUTION: An instance of an old-style class has to be checked for a
Tim Petersf6b80452003-04-07 19:21:15 +0000498 *__del__ method, and earlier versions of this used to call PyObject_HasAttr,
499 * which in turn could call the class's __getattr__ hook (if any). That
500 * could invoke arbitrary Python code, mutating the object graph in arbitrary
501 * ways, and that was the source of some excruciatingly subtle bugs.
Tim Peters86b993b2003-04-05 17:35:54 +0000502 */
Neil Schemenauera765c122001-11-01 17:35:23 +0000503static int
504has_finalizer(PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000505{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000506 if (PyInstance_Check(op)) {
507 assert(delstr != NULL);
508 return _PyInstance_Lookup(op, delstr) != NULL;
509 }
510 else if (PyType_HasFeature(op->ob_type, Py_TPFLAGS_HEAPTYPE))
511 return op->ob_type->tp_del != NULL;
512 else if (PyGen_CheckExact(op))
513 return PyGen_NeedsFinalizing((PyGenObject *)op);
514 else
515 return 0;
Neil Schemenauera765c122001-11-01 17:35:23 +0000516}
517
Antoine Pitrouff0e22b2012-05-28 22:22:34 +0200518/* Try to untrack all currently tracked dictionaries */
519static void
520untrack_dicts(PyGC_Head *head)
521{
522 PyGC_Head *next, *gc = head->gc.gc_next;
523 while (gc != head) {
524 PyObject *op = FROM_GC(gc);
525 next = gc->gc.gc_next;
526 if (PyDict_CheckExact(op))
527 _PyDict_MaybeUntrack(op);
528 gc = next;
529 }
530}
531
Tim Petersead8b7a2004-10-30 23:09:22 +0000532/* Move the objects in unreachable with __del__ methods into `finalizers`.
533 * Objects moved into `finalizers` have gc_refs set to GC_REACHABLE; the
534 * objects remaining in unreachable are left at GC_TENTATIVELY_UNREACHABLE.
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000535 */
Neil Schemenauera765c122001-11-01 17:35:23 +0000536static void
Tim Petersead8b7a2004-10-30 23:09:22 +0000537move_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
Neil Schemenauera765c122001-11-01 17:35:23 +0000538{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000539 PyGC_Head *gc;
540 PyGC_Head *next;
Tim Petersf6b80452003-04-07 19:21:15 +0000541
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000542 /* March over unreachable. Move objects with finalizers into
543 * `finalizers`.
544 */
545 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
546 PyObject *op = FROM_GC(gc);
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000547
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000548 assert(IS_TENTATIVELY_UNREACHABLE(op));
549 next = gc->gc.gc_next;
Tim Petersf6ae7a42003-04-05 18:40:50 +0000550
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000551 if (has_finalizer(op)) {
552 gc_list_move(gc, finalizers);
553 gc->gc.gc_refs = GC_REACHABLE;
554 }
555 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000556}
557
Tim Peters19b74c72002-07-01 03:52:19 +0000558/* A traversal callback for move_finalizer_reachable. */
559static int
560visit_move(PyObject *op, PyGC_Head *tolist)
561{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000562 if (PyObject_IS_GC(op)) {
563 if (IS_TENTATIVELY_UNREACHABLE(op)) {
564 PyGC_Head *gc = AS_GC(op);
565 gc_list_move(gc, tolist);
566 gc->gc.gc_refs = GC_REACHABLE;
567 }
568 }
569 return 0;
Tim Peters19b74c72002-07-01 03:52:19 +0000570}
571
572/* Move objects that are reachable from finalizers, from the unreachable set
Tim Petersf6b80452003-04-07 19:21:15 +0000573 * into finalizers set.
Tim Peters19b74c72002-07-01 03:52:19 +0000574 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000575static void
Tim Petersf6b80452003-04-07 19:21:15 +0000576move_finalizer_reachable(PyGC_Head *finalizers)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000577{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000578 traverseproc traverse;
579 PyGC_Head *gc = finalizers->gc.gc_next;
580 for (; gc != finalizers; gc = gc->gc.gc_next) {
581 /* Note that the finalizers list may grow during this. */
582 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
583 (void) traverse(FROM_GC(gc),
584 (visitproc)visit_move,
585 (void *)finalizers);
586 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000587}
588
Tim Petersead8b7a2004-10-30 23:09:22 +0000589/* Clear all weakrefs to unreachable objects, and if such a weakref has a
590 * callback, invoke it if necessary. Note that it's possible for such
591 * weakrefs to be outside the unreachable set -- indeed, those are precisely
592 * the weakrefs whose callbacks must be invoked. See gc_weakref.txt for
593 * overview & some details. Some weakrefs with callbacks may be reclaimed
594 * directly by this routine; the number reclaimed is the return value. Other
595 * weakrefs with callbacks may be moved into the `old` generation. Objects
596 * moved into `old` have gc_refs set to GC_REACHABLE; the objects remaining in
597 * unreachable are left at GC_TENTATIVELY_UNREACHABLE. When this returns,
598 * no object in `unreachable` is weakly referenced anymore.
Tim Peters403a2032003-11-20 21:21:46 +0000599 */
600static int
Tim Petersead8b7a2004-10-30 23:09:22 +0000601handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
Tim Peters403a2032003-11-20 21:21:46 +0000602{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000603 PyGC_Head *gc;
604 PyObject *op; /* generally FROM_GC(gc) */
605 PyWeakReference *wr; /* generally a cast of op */
606 PyGC_Head wrcb_to_call; /* weakrefs with callbacks to call */
607 PyGC_Head *next;
608 int num_freed = 0;
Tim Peters403a2032003-11-20 21:21:46 +0000609
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000610 gc_list_init(&wrcb_to_call);
Tim Peters403a2032003-11-20 21:21:46 +0000611
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000612 /* Clear all weakrefs to the objects in unreachable. If such a weakref
613 * also has a callback, move it into `wrcb_to_call` if the callback
614 * needs to be invoked. Note that we cannot invoke any callbacks until
615 * all weakrefs to unreachable objects are cleared, lest the callback
616 * resurrect an unreachable object via a still-active weakref. We
617 * make another pass over wrcb_to_call, invoking callbacks, after this
618 * pass completes.
619 */
620 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
621 PyWeakReference **wrlist;
Tim Petersead8b7a2004-10-30 23:09:22 +0000622
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000623 op = FROM_GC(gc);
624 assert(IS_TENTATIVELY_UNREACHABLE(op));
625 next = gc->gc.gc_next;
Tim Petersead8b7a2004-10-30 23:09:22 +0000626
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000627 if (! PyType_SUPPORTS_WEAKREFS(Py_TYPE(op)))
628 continue;
Tim Petersead8b7a2004-10-30 23:09:22 +0000629
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000630 /* It supports weakrefs. Does it have any? */
631 wrlist = (PyWeakReference **)
632 PyObject_GET_WEAKREFS_LISTPTR(op);
Tim Petersead8b7a2004-10-30 23:09:22 +0000633
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000634 /* `op` may have some weakrefs. March over the list, clear
635 * all the weakrefs, and move the weakrefs with callbacks
636 * that must be called into wrcb_to_call.
637 */
638 for (wr = *wrlist; wr != NULL; wr = *wrlist) {
639 PyGC_Head *wrasgc; /* AS_GC(wr) */
Tim Petersead8b7a2004-10-30 23:09:22 +0000640
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000641 /* _PyWeakref_ClearRef clears the weakref but leaves
642 * the callback pointer intact. Obscure: it also
643 * changes *wrlist.
644 */
645 assert(wr->wr_object == op);
646 _PyWeakref_ClearRef(wr);
647 assert(wr->wr_object == Py_None);
648 if (wr->wr_callback == NULL)
649 continue; /* no callback */
Tim Petersead8b7a2004-10-30 23:09:22 +0000650
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000651 /* Headache time. `op` is going away, and is weakly referenced by
652 * `wr`, which has a callback. Should the callback be invoked? If wr
653 * is also trash, no:
654 *
655 * 1. There's no need to call it. The object and the weakref are
656 * both going away, so it's legitimate to pretend the weakref is
657 * going away first. The user has to ensure a weakref outlives its
658 * referent if they want a guarantee that the wr callback will get
659 * invoked.
660 *
661 * 2. It may be catastrophic to call it. If the callback is also in
662 * cyclic trash (CT), then although the CT is unreachable from
663 * outside the current generation, CT may be reachable from the
664 * callback. Then the callback could resurrect insane objects.
665 *
666 * Since the callback is never needed and may be unsafe in this case,
667 * wr is simply left in the unreachable set. Note that because we
668 * already called _PyWeakref_ClearRef(wr), its callback will never
669 * trigger.
670 *
671 * OTOH, if wr isn't part of CT, we should invoke the callback: the
672 * weakref outlived the trash. Note that since wr isn't CT in this
673 * case, its callback can't be CT either -- wr acted as an external
674 * root to this generation, and therefore its callback did too. So
675 * nothing in CT is reachable from the callback either, so it's hard
676 * to imagine how calling it later could create a problem for us. wr
677 * is moved to wrcb_to_call in this case.
678 */
679 if (IS_TENTATIVELY_UNREACHABLE(wr))
680 continue;
681 assert(IS_REACHABLE(wr));
Tim Peterscc2a8662004-10-31 22:12:43 +0000682
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000683 /* Create a new reference so that wr can't go away
684 * before we can process it again.
685 */
686 Py_INCREF(wr);
Tim Petersead8b7a2004-10-30 23:09:22 +0000687
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000688 /* Move wr to wrcb_to_call, for the next pass. */
689 wrasgc = AS_GC(wr);
690 assert(wrasgc != next); /* wrasgc is reachable, but
691 next isn't, so they can't
692 be the same */
693 gc_list_move(wrasgc, &wrcb_to_call);
694 }
695 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000696
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000697 /* Invoke the callbacks we decided to honor. It's safe to invoke them
698 * because they can't reference unreachable objects.
699 */
700 while (! gc_list_is_empty(&wrcb_to_call)) {
701 PyObject *temp;
702 PyObject *callback;
Tim Petersead8b7a2004-10-30 23:09:22 +0000703
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000704 gc = wrcb_to_call.gc.gc_next;
705 op = FROM_GC(gc);
706 assert(IS_REACHABLE(op));
707 assert(PyWeakref_Check(op));
708 wr = (PyWeakReference *)op;
709 callback = wr->wr_callback;
710 assert(callback != NULL);
Tim Petersead8b7a2004-10-30 23:09:22 +0000711
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000712 /* copy-paste of weakrefobject.c's handle_callback() */
713 temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
714 if (temp == NULL)
715 PyErr_WriteUnraisable(callback);
716 else
717 Py_DECREF(temp);
Tim Petersead8b7a2004-10-30 23:09:22 +0000718
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000719 /* Give up the reference we created in the first pass. When
720 * op's refcount hits 0 (which it may or may not do right now),
721 * op's tp_dealloc will decref op->wr_callback too. Note
722 * that the refcount probably will hit 0 now, and because this
723 * weakref was reachable to begin with, gc didn't already
724 * add it to its count of freed objects. Example: a reachable
725 * weak value dict maps some key to this reachable weakref.
726 * The callback removes this key->weakref mapping from the
727 * dict, leaving no other references to the weakref (excepting
728 * ours).
729 */
730 Py_DECREF(op);
731 if (wrcb_to_call.gc.gc_next == gc) {
732 /* object is still alive -- move it */
733 gc_list_move(gc, old);
734 }
735 else
736 ++num_freed;
737 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000738
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000739 return num_freed;
Tim Peters403a2032003-11-20 21:21:46 +0000740}
741
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000742static void
Jeremy Hylton06257772000-08-31 15:10:24 +0000743debug_instance(char *msg, PyInstanceObject *inst)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000744{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000745 char *cname;
746 /* simple version of instance_repr */
747 PyObject *classname = inst->in_class->cl_name;
748 if (classname != NULL && PyString_Check(classname))
749 cname = PyString_AsString(classname);
750 else
751 cname = "?";
752 PySys_WriteStderr("gc: %.100s <%.100s instance at %p>\n",
753 msg, cname, inst);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000754}
755
756static void
Jeremy Hylton06257772000-08-31 15:10:24 +0000757debug_cycle(char *msg, PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000758{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000759 if ((debug & DEBUG_INSTANCES) && PyInstance_Check(op)) {
760 debug_instance(msg, (PyInstanceObject *)op);
761 }
762 else if (debug & DEBUG_OBJECTS) {
763 PySys_WriteStderr("gc: %.100s <%.100s %p>\n",
764 msg, Py_TYPE(op)->tp_name, op);
765 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000766}
767
Tim Petersbf384c22003-04-06 00:11:39 +0000768/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
769 * only from such cycles).
Tim Petersf6b80452003-04-07 19:21:15 +0000770 * If DEBUG_SAVEALL, all objects in finalizers are appended to the module
771 * garbage list (a Python list), else only the objects in finalizers with
772 * __del__ methods are appended to garbage. All objects in finalizers are
773 * merged into the old list regardless.
Tim Peters259272b2003-04-06 19:41:39 +0000774 * Returns 0 if all OK, <0 on error (out of memory to grow the garbage list).
775 * The finalizers list is made empty on a successful return.
Tim Petersbf384c22003-04-06 00:11:39 +0000776 */
Tim Peters259272b2003-04-06 19:41:39 +0000777static int
Tim Petersf6b80452003-04-07 19:21:15 +0000778handle_finalizers(PyGC_Head *finalizers, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000779{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000780 PyGC_Head *gc = finalizers->gc.gc_next;
Tim Petersf6b80452003-04-07 19:21:15 +0000781
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000782 if (garbage == NULL) {
783 garbage = PyList_New(0);
784 if (garbage == NULL)
785 Py_FatalError("gc couldn't create gc.garbage list");
786 }
787 for (; gc != finalizers; gc = gc->gc.gc_next) {
788 PyObject *op = FROM_GC(gc);
Tim Petersf6b80452003-04-07 19:21:15 +0000789
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000790 if ((debug & DEBUG_SAVEALL) || has_finalizer(op)) {
791 if (PyList_Append(garbage, op) < 0)
792 return -1;
793 }
794 }
Tim Petersf6b80452003-04-07 19:21:15 +0000795
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000796 gc_list_merge(finalizers, old);
797 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000798}
799
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000800/* Break reference cycles by clearing the containers involved. This is
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000801 * tricky business as the lists can be changing and we don't know which
Tim Peters19b74c72002-07-01 03:52:19 +0000802 * objects may be freed. It is possible I screwed something up here.
803 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000804static void
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000805delete_garbage(PyGC_Head *collectable, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000806{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000807 inquiry clear;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000808
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000809 while (!gc_list_is_empty(collectable)) {
810 PyGC_Head *gc = collectable->gc.gc_next;
811 PyObject *op = FROM_GC(gc);
Tim Peters88396172002-06-30 17:56:40 +0000812
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000813 assert(IS_TENTATIVELY_UNREACHABLE(op));
814 if (debug & DEBUG_SAVEALL) {
815 PyList_Append(garbage, op);
816 }
817 else {
818 if ((clear = Py_TYPE(op)->tp_clear) != NULL) {
819 Py_INCREF(op);
820 clear(op);
821 Py_DECREF(op);
822 }
823 }
824 if (collectable->gc.gc_next == gc) {
825 /* object is still alive, move it, it may die later */
826 gc_list_move(gc, old);
827 gc->gc.gc_refs = GC_REACHABLE;
828 }
829 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000830}
831
Christian Heimes3b718a72008-02-14 12:47:33 +0000832/* Clear all free lists
833 * All free lists are cleared during the collection of the highest generation.
834 * Allocated items in the free list may keep a pymalloc arena occupied.
835 * Clearing the free lists may give back memory to the OS earlier.
836 */
837static void
838clear_freelists(void)
839{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000840 (void)PyMethod_ClearFreeList();
841 (void)PyFrame_ClearFreeList();
842 (void)PyCFunction_ClearFreeList();
843 (void)PyTuple_ClearFreeList();
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000844#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000845 (void)PyUnicode_ClearFreeList();
Benjamin Peterson78821dd2009-01-25 17:15:10 +0000846#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000847 (void)PyInt_ClearFreeList();
848 (void)PyFloat_ClearFreeList();
Christian Heimes3b718a72008-02-14 12:47:33 +0000849}
850
Antoine Pitrou73c0e652008-12-17 22:46:54 +0000851static double
852get_time(void)
853{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000854 double result = 0;
855 if (tmod != NULL) {
856 PyObject *f = PyObject_CallMethod(tmod, "time", NULL);
857 if (f == NULL) {
858 PyErr_Clear();
859 }
860 else {
861 if (PyFloat_Check(f))
862 result = PyFloat_AsDouble(f);
863 Py_DECREF(f);
864 }
865 }
866 return result;
Antoine Pitrou73c0e652008-12-17 22:46:54 +0000867}
868
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000869/* This is the main function. Read this to understand how the
870 * collection process works. */
Neal Norwitz7b216c52006-03-04 20:01:53 +0000871static Py_ssize_t
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000872collect(int generation)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000873{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000874 int i;
875 Py_ssize_t m = 0; /* # objects collected */
876 Py_ssize_t n = 0; /* # unreachable objects that couldn't be collected */
877 PyGC_Head *young; /* the generation we are examining */
878 PyGC_Head *old; /* next older generation */
879 PyGC_Head unreachable; /* non-problematic unreachable trash */
880 PyGC_Head finalizers; /* objects with, & reachable from, __del__ */
881 PyGC_Head *gc;
882 double t1 = 0.0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000883
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000884 if (delstr == NULL) {
885 delstr = PyString_InternFromString("__del__");
886 if (delstr == NULL)
887 Py_FatalError("gc couldn't allocate \"__del__\"");
888 }
Tim Peters93ad66d2003-04-05 17:15:44 +0000889
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000890 if (debug & DEBUG_STATS) {
891 PySys_WriteStderr("gc: collecting generation %d...\n",
892 generation);
893 PySys_WriteStderr("gc: objects in each generation:");
894 for (i = 0; i < NUM_GENERATIONS; i++)
895 PySys_WriteStderr(" %" PY_FORMAT_SIZE_T "d",
896 gc_list_size(GEN_HEAD(i)));
897 t1 = get_time();
898 PySys_WriteStderr("\n");
899 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000900
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000901 /* update collection and allocation counters */
902 if (generation+1 < NUM_GENERATIONS)
903 generations[generation+1].count += 1;
904 for (i = 0; i <= generation; i++)
905 generations[i].count = 0;
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000906
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000907 /* merge younger generations with one we are currently collecting */
908 for (i = 0; i < generation; i++) {
909 gc_list_merge(GEN_HEAD(i), GEN_HEAD(generation));
910 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000911
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000912 /* handy references */
913 young = GEN_HEAD(generation);
914 if (generation < NUM_GENERATIONS-1)
915 old = GEN_HEAD(generation+1);
916 else
917 old = young;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000918
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000919 /* Using ob_refcnt and gc_refs, calculate which objects in the
920 * container set are reachable from outside the set (i.e., have a
921 * refcount greater than 0 when all the references within the
922 * set are taken into account).
923 */
924 update_refs(young);
925 subtract_refs(young);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000926
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000927 /* Leave everything reachable from outside young in young, and move
928 * everything else (in young) to unreachable.
929 * NOTE: This used to move the reachable objects into a reachable
930 * set instead. But most things usually turn out to be reachable,
931 * so it's more efficient to move the unreachable things.
932 */
933 gc_list_init(&unreachable);
934 move_unreachable(young, &unreachable);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000935
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000936 /* Move reachable objects to next generation. */
937 if (young != old) {
938 if (generation == NUM_GENERATIONS - 2) {
939 long_lived_pending += gc_list_size(young);
940 }
941 gc_list_merge(young, old);
942 }
943 else {
Antoine Pitrouff0e22b2012-05-28 22:22:34 +0200944 /* We only untrack dicts in full collections, to avoid quadratic
945 dict build-up. See issue #14775. */
946 untrack_dicts(young);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000947 long_lived_pending = 0;
948 long_lived_total = gc_list_size(young);
949 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000950
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000951 /* All objects in unreachable are trash, but objects reachable from
952 * finalizers can't safely be deleted. Python programmers should take
953 * care not to create such things. For Python, finalizers means
954 * instance objects with __del__ methods. Weakrefs with callbacks
955 * can also call arbitrary Python code but they will be dealt with by
956 * handle_weakrefs().
957 */
958 gc_list_init(&finalizers);
959 move_finalizers(&unreachable, &finalizers);
960 /* finalizers contains the unreachable objects with a finalizer;
961 * unreachable objects reachable *from* those are also uncollectable,
962 * and we move those into the finalizers list too.
963 */
964 move_finalizer_reachable(&finalizers);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000965
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000966 /* Collect statistics on collectable objects found and print
967 * debugging information.
968 */
969 for (gc = unreachable.gc.gc_next; gc != &unreachable;
970 gc = gc->gc.gc_next) {
971 m++;
972 if (debug & DEBUG_COLLECTABLE) {
973 debug_cycle("collectable", FROM_GC(gc));
974 }
975 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000976
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000977 /* Clear weakrefs and invoke callbacks as necessary. */
978 m += handle_weakrefs(&unreachable, old);
Tim Petersead8b7a2004-10-30 23:09:22 +0000979
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000980 /* Call tp_clear on objects in the unreachable set. This will cause
981 * the reference cycles to be broken. It may also cause some objects
982 * in finalizers to be freed.
983 */
984 delete_garbage(&unreachable, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000985
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000986 /* Collect statistics on uncollectable objects found and print
987 * debugging information. */
988 for (gc = finalizers.gc.gc_next;
989 gc != &finalizers;
990 gc = gc->gc.gc_next) {
991 n++;
992 if (debug & DEBUG_UNCOLLECTABLE)
993 debug_cycle("uncollectable", FROM_GC(gc));
994 }
995 if (debug & DEBUG_STATS) {
996 double t2 = get_time();
997 if (m == 0 && n == 0)
998 PySys_WriteStderr("gc: done");
999 else
1000 PySys_WriteStderr(
1001 "gc: done, "
1002 "%" PY_FORMAT_SIZE_T "d unreachable, "
1003 "%" PY_FORMAT_SIZE_T "d uncollectable",
1004 n+m, n);
1005 if (t1 && t2) {
1006 PySys_WriteStderr(", %.4fs elapsed", t2-t1);
1007 }
1008 PySys_WriteStderr(".\n");
1009 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001010
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001011 /* Append instances in the uncollectable set to a Python
1012 * reachable list of garbage. The programmer has to deal with
1013 * this if they insist on creating this type of structure.
1014 */
1015 (void)handle_finalizers(&finalizers, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001016
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001017 /* Clear free list only during the collection of the highest
1018 * generation */
1019 if (generation == NUM_GENERATIONS-1) {
1020 clear_freelists();
1021 }
Christian Heimes3b718a72008-02-14 12:47:33 +00001022
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001023 if (PyErr_Occurred()) {
1024 if (gc_str == NULL)
1025 gc_str = PyString_FromString("garbage collection");
1026 PyErr_WriteUnraisable(gc_str);
1027 Py_FatalError("unexpected exception during garbage collection");
1028 }
1029 return n+m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001030}
1031
Neal Norwitz7b216c52006-03-04 20:01:53 +00001032static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001033collect_generations(void)
1034{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001035 int i;
1036 Py_ssize_t n = 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001037
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001038 /* Find the oldest generation (highest numbered) where the count
1039 * exceeds the threshold. Objects in the that generation and
1040 * generations younger than it will be collected. */
1041 for (i = NUM_GENERATIONS-1; i >= 0; i--) {
1042 if (generations[i].count > generations[i].threshold) {
1043 /* Avoid quadratic performance degradation in number
1044 of tracked objects. See comments at the beginning
1045 of this file, and issue #4074.
1046 */
1047 if (i == NUM_GENERATIONS - 1
1048 && long_lived_pending < long_lived_total / 4)
1049 continue;
1050 n = collect(i);
1051 break;
1052 }
1053 }
1054 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001055}
1056
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001057PyDoc_STRVAR(gc_enable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001058"enable() -> None\n"
1059"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001060"Enable automatic garbage collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001061
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001062static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001063gc_enable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001064{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001065 enabled = 1;
1066 Py_INCREF(Py_None);
1067 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001068}
1069
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001070PyDoc_STRVAR(gc_disable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001071"disable() -> None\n"
1072"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001073"Disable automatic garbage collection.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001074
1075static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001076gc_disable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001077{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001078 enabled = 0;
1079 Py_INCREF(Py_None);
1080 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001081}
1082
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001083PyDoc_STRVAR(gc_isenabled__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001084"isenabled() -> status\n"
1085"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001086"Returns true if automatic garbage collection is enabled.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001087
1088static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001089gc_isenabled(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001090{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001091 return PyBool_FromLong((long)enabled);
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001092}
1093
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001094PyDoc_STRVAR(gc_collect__doc__,
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001095"collect([generation]) -> n\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001096"\n"
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001097"With no arguments, run a full collection. The optional argument\n"
1098"may be an integer specifying which generation to collect. A ValueError\n"
1099"is raised if the generation number is invalid.\n\n"
1100"The number of unreachable objects is returned.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001101
1102static PyObject *
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001103gc_collect(PyObject *self, PyObject *args, PyObject *kws)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001104{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001105 static char *keywords[] = {"generation", NULL};
1106 int genarg = NUM_GENERATIONS - 1;
1107 Py_ssize_t n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001108
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001109 if (!PyArg_ParseTupleAndKeywords(args, kws, "|i", keywords, &genarg))
1110 return NULL;
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001111
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001112 else if (genarg < 0 || genarg >= NUM_GENERATIONS) {
1113 PyErr_SetString(PyExc_ValueError, "invalid generation");
1114 return NULL;
1115 }
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001116
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001117 if (collecting)
1118 n = 0; /* already collecting, don't do anything */
1119 else {
1120 collecting = 1;
1121 n = collect(genarg);
1122 collecting = 0;
1123 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001124
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001125 return PyInt_FromSsize_t(n);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001126}
1127
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001128PyDoc_STRVAR(gc_set_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001129"set_debug(flags) -> None\n"
1130"\n"
1131"Set the garbage collection debugging flags. Debugging information is\n"
1132"written to sys.stderr.\n"
1133"\n"
1134"flags is an integer and can have the following bits turned on:\n"
1135"\n"
1136" DEBUG_STATS - Print statistics during collection.\n"
1137" DEBUG_COLLECTABLE - Print collectable objects found.\n"
1138" DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found.\n"
1139" DEBUG_INSTANCES - Print instance objects.\n"
1140" DEBUG_OBJECTS - Print objects other than instances.\n"
Neil Schemenauer544de1e2000-09-22 15:22:38 +00001141" DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them.\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001142" DEBUG_LEAK - Debug leaking programs (everything but STATS).\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001143
1144static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001145gc_set_debug(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001146{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001147 if (!PyArg_ParseTuple(args, "i:set_debug", &debug))
1148 return NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001149
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001150 Py_INCREF(Py_None);
1151 return Py_None;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001152}
1153
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001154PyDoc_STRVAR(gc_get_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001155"get_debug() -> flags\n"
1156"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157"Get the garbage collection debugging flags.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001158
1159static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001160gc_get_debug(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001161{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001162 return Py_BuildValue("i", debug);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001163}
1164
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001165PyDoc_STRVAR(gc_set_thresh__doc__,
Neal Norwitz2a47c0f2002-01-29 00:53:41 +00001166"set_threshold(threshold0, [threshold1, threshold2]) -> None\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001167"\n"
1168"Sets the collection thresholds. Setting threshold0 to zero disables\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001169"collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001170
1171static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001172gc_set_thresh(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001173{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001174 int i;
1175 if (!PyArg_ParseTuple(args, "i|ii:set_threshold",
1176 &generations[0].threshold,
1177 &generations[1].threshold,
1178 &generations[2].threshold))
1179 return NULL;
1180 for (i = 2; i < NUM_GENERATIONS; i++) {
1181 /* generations higher than 2 get the same threshold */
1182 generations[i].threshold = generations[2].threshold;
1183 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001184
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001185 Py_INCREF(Py_None);
1186 return Py_None;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001187}
1188
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001189PyDoc_STRVAR(gc_get_thresh__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001190"get_threshold() -> (threshold0, threshold1, threshold2)\n"
1191"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001192"Return the current collection thresholds\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001193
1194static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001195gc_get_thresh(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001196{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001197 return Py_BuildValue("(iii)",
1198 generations[0].threshold,
1199 generations[1].threshold,
1200 generations[2].threshold);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001201}
1202
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001203PyDoc_STRVAR(gc_get_count__doc__,
1204"get_count() -> (count0, count1, count2)\n"
1205"\n"
1206"Return the current collection counts\n");
1207
1208static PyObject *
1209gc_get_count(PyObject *self, PyObject *noargs)
1210{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001211 return Py_BuildValue("(iii)",
1212 generations[0].count,
1213 generations[1].count,
1214 generations[2].count);
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001215}
1216
Neil Schemenauer48c70342001-08-09 15:38:31 +00001217static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001218referrersvisit(PyObject* obj, PyObject *objs)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001219{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001220 Py_ssize_t i;
1221 for (i = 0; i < PyTuple_GET_SIZE(objs); i++)
1222 if (PyTuple_GET_ITEM(objs, i) == obj)
1223 return 1;
1224 return 0;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001225}
1226
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001227static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001228gc_referrers_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001229{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001230 PyGC_Head *gc;
1231 PyObject *obj;
1232 traverseproc traverse;
1233 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
1234 obj = FROM_GC(gc);
1235 traverse = Py_TYPE(obj)->tp_traverse;
1236 if (obj == objs || obj == resultlist)
1237 continue;
1238 if (traverse(obj, (visitproc)referrersvisit, objs)) {
1239 if (PyList_Append(resultlist, obj) < 0)
1240 return 0; /* error */
1241 }
1242 }
1243 return 1; /* no error */
Neil Schemenauer48c70342001-08-09 15:38:31 +00001244}
1245
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001246PyDoc_STRVAR(gc_get_referrers__doc__,
Martin v. Löwis560da622001-11-24 09:24:51 +00001247"get_referrers(*objs) -> list\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001248Return the list of objects that directly refer to any of objs.");
Neil Schemenauer48c70342001-08-09 15:38:31 +00001249
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001250static PyObject *
Martin v. Löwis560da622001-11-24 09:24:51 +00001251gc_get_referrers(PyObject *self, PyObject *args)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001252{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001253 int i;
1254 PyObject *result = PyList_New(0);
1255 if (!result) return NULL;
Georg Brandl5c170fd2006-03-17 19:03:25 +00001256
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001257 for (i = 0; i < NUM_GENERATIONS; i++) {
1258 if (!(gc_referrers_for(args, GEN_HEAD(i), result))) {
1259 Py_DECREF(result);
1260 return NULL;
1261 }
1262 }
1263 return result;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001264}
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001265
Tim Peters0f81ab62003-04-08 16:39:48 +00001266/* Append obj to list; return true if error (out of memory), false if OK. */
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001267static int
Tim Peters730f5532003-04-08 17:17:17 +00001268referentsvisit(PyObject *obj, PyObject *list)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001269{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001270 return PyList_Append(list, obj) < 0;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001271}
1272
Tim Peters730f5532003-04-08 17:17:17 +00001273PyDoc_STRVAR(gc_get_referents__doc__,
1274"get_referents(*objs) -> list\n\
Jeremy Hylton059b0942003-04-03 16:29:13 +00001275Return the list of objects that are directly referred to by objs.");
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001276
1277static PyObject *
Tim Peters730f5532003-04-08 17:17:17 +00001278gc_get_referents(PyObject *self, PyObject *args)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001279{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001280 Py_ssize_t i;
1281 PyObject *result = PyList_New(0);
Tim Peters0f81ab62003-04-08 16:39:48 +00001282
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001283 if (result == NULL)
1284 return NULL;
Tim Peters0f81ab62003-04-08 16:39:48 +00001285
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001286 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
1287 traverseproc traverse;
1288 PyObject *obj = PyTuple_GET_ITEM(args, i);
Tim Peters0f81ab62003-04-08 16:39:48 +00001289
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001290 if (! PyObject_IS_GC(obj))
1291 continue;
1292 traverse = Py_TYPE(obj)->tp_traverse;
1293 if (! traverse)
1294 continue;
1295 if (traverse(obj, (visitproc)referentsvisit, result)) {
1296 Py_DECREF(result);
1297 return NULL;
1298 }
1299 }
1300 return result;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001301}
1302
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001303PyDoc_STRVAR(gc_get_objects__doc__,
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001304"get_objects() -> [...]\n"
1305"\n"
1306"Return a list of objects tracked by the collector (excluding the list\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001307"returned).\n");
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001308
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001309static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001310gc_get_objects(PyObject *self, PyObject *noargs)
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001311{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001312 int i;
1313 PyObject* result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001315 result = PyList_New(0);
1316 if (result == NULL)
1317 return NULL;
1318 for (i = 0; i < NUM_GENERATIONS; i++) {
1319 if (append_objects(result, GEN_HEAD(i))) {
1320 Py_DECREF(result);
1321 return NULL;
1322 }
1323 }
1324 return result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001325}
1326
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001327PyDoc_STRVAR(gc_is_tracked__doc__,
1328"is_tracked(obj) -> bool\n"
1329"\n"
1330"Returns true if the object is tracked by the garbage collector.\n"
1331"Simple atomic objects will return false.\n"
1332);
1333
1334static PyObject *
1335gc_is_tracked(PyObject *self, PyObject *obj)
1336{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001337 PyObject *result;
1338
1339 if (PyObject_IS_GC(obj) && IS_TRACKED(obj))
1340 result = Py_True;
1341 else
1342 result = Py_False;
1343 Py_INCREF(result);
1344 return result;
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001345}
1346
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001347
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001348PyDoc_STRVAR(gc__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001349"This module provides access to the garbage collector for reference cycles.\n"
1350"\n"
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001351"enable() -- Enable automatic garbage collection.\n"
1352"disable() -- Disable automatic garbage collection.\n"
1353"isenabled() -- Returns true if automatic collection is enabled.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001354"collect() -- Do a full collection right now.\n"
Barry Warsawe5ec6132006-10-09 19:43:24 +00001355"get_count() -- Return the current collection counts.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001356"set_debug() -- Set debugging flags.\n"
1357"get_debug() -- Get debugging flags.\n"
1358"set_threshold() -- Set the collection thresholds.\n"
1359"get_threshold() -- Return the current the collection thresholds.\n"
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001360"get_objects() -- Return a list of all objects tracked by the collector.\n"
Antoine Pitrouf8387af2009-03-23 18:41:45 +00001361"is_tracked() -- Returns true if a given object is tracked.\n"
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001362"get_referrers() -- Return the list of objects that refer to an object.\n"
Tim Peters730f5532003-04-08 17:17:17 +00001363"get_referents() -- Return the list of objects that an object refers to.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001364
1365static PyMethodDef GcMethods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001366 {"enable", gc_enable, METH_NOARGS, gc_enable__doc__},
1367 {"disable", gc_disable, METH_NOARGS, gc_disable__doc__},
1368 {"isenabled", gc_isenabled, METH_NOARGS, gc_isenabled__doc__},
1369 {"set_debug", gc_set_debug, METH_VARARGS, gc_set_debug__doc__},
1370 {"get_debug", gc_get_debug, METH_NOARGS, gc_get_debug__doc__},
1371 {"get_count", gc_get_count, METH_NOARGS, gc_get_count__doc__},
1372 {"set_threshold", gc_set_thresh, METH_VARARGS, gc_set_thresh__doc__},
1373 {"get_threshold", gc_get_thresh, METH_NOARGS, gc_get_thresh__doc__},
1374 {"collect", (PyCFunction)gc_collect,
1375 METH_VARARGS | METH_KEYWORDS, gc_collect__doc__},
1376 {"get_objects", gc_get_objects,METH_NOARGS, gc_get_objects__doc__},
1377 {"is_tracked", gc_is_tracked, METH_O, gc_is_tracked__doc__},
1378 {"get_referrers", gc_get_referrers, METH_VARARGS,
1379 gc_get_referrers__doc__},
1380 {"get_referents", gc_get_referents, METH_VARARGS,
1381 gc_get_referents__doc__},
1382 {NULL, NULL} /* Sentinel */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001383};
1384
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001385PyMODINIT_FUNC
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001386initgc(void)
1387{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001388 PyObject *m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001389
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001390 m = Py_InitModule4("gc",
1391 GcMethods,
1392 gc__doc__,
1393 NULL,
1394 PYTHON_API_VERSION);
1395 if (m == NULL)
1396 return;
Tim Peters11558872003-04-06 23:30:52 +00001397
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001398 if (garbage == NULL) {
1399 garbage = PyList_New(0);
1400 if (garbage == NULL)
1401 return;
1402 }
1403 Py_INCREF(garbage);
1404 if (PyModule_AddObject(m, "garbage", garbage) < 0)
1405 return;
Neal Norwitz57a03612006-04-26 05:34:03 +00001406
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001407 /* Importing can't be done in collect() because collect()
1408 * can be called via PyGC_Collect() in Py_Finalize().
1409 * This wouldn't be a problem, except that <initialized> is
1410 * reset to 0 before calling collect which trips up
1411 * the import and triggers an assertion.
1412 */
1413 if (tmod == NULL) {
1414 tmod = PyImport_ImportModuleNoBlock("time");
1415 if (tmod == NULL)
1416 PyErr_Clear();
1417 }
Neal Norwitz57a03612006-04-26 05:34:03 +00001418
Tim Peters11558872003-04-06 23:30:52 +00001419#define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) return
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001420 ADD_INT(DEBUG_STATS);
1421 ADD_INT(DEBUG_COLLECTABLE);
1422 ADD_INT(DEBUG_UNCOLLECTABLE);
1423 ADD_INT(DEBUG_INSTANCES);
1424 ADD_INT(DEBUG_OBJECTS);
1425 ADD_INT(DEBUG_SAVEALL);
1426 ADD_INT(DEBUG_LEAK);
Tim Peters11558872003-04-06 23:30:52 +00001427#undef ADD_INT
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001428}
1429
Guido van Rossume13ddc92003-04-17 17:29:22 +00001430/* API to invoke gc.collect() from C */
Neal Norwitz7b216c52006-03-04 20:01:53 +00001431Py_ssize_t
Guido van Rossume13ddc92003-04-17 17:29:22 +00001432PyGC_Collect(void)
1433{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001434 Py_ssize_t n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001435
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001436 if (collecting)
1437 n = 0; /* already collecting, don't do anything */
1438 else {
1439 collecting = 1;
1440 n = collect(NUM_GENERATIONS - 1);
1441 collecting = 0;
1442 }
Guido van Rossume13ddc92003-04-17 17:29:22 +00001443
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001444 return n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001445}
1446
Neil Schemenauer43411b52001-08-30 00:05:51 +00001447/* for debugging */
Guido van Rossume13ddc92003-04-17 17:29:22 +00001448void
1449_PyGC_Dump(PyGC_Head *g)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001450{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001451 _PyObject_Dump(FROM_GC(g));
Neil Schemenauer43411b52001-08-30 00:05:51 +00001452}
1453
Neil Schemenauer43411b52001-08-30 00:05:51 +00001454/* extension modules might be compiled with GC support so these
1455 functions must always be available */
1456
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001457#undef PyObject_GC_Track
1458#undef PyObject_GC_UnTrack
1459#undef PyObject_GC_Del
1460#undef _PyObject_GC_Malloc
1461
Neil Schemenauer43411b52001-08-30 00:05:51 +00001462void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001463PyObject_GC_Track(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001464{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001465 _PyObject_GC_TRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001466}
1467
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001468/* for binary compatibility with 2.2 */
Neil Schemenauer43411b52001-08-30 00:05:51 +00001469void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001470_PyObject_GC_Track(PyObject *op)
1471{
1472 PyObject_GC_Track(op);
1473}
1474
1475void
1476PyObject_GC_UnTrack(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001477{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001478 /* Obscure: the Py_TRASHCAN mechanism requires that we be able to
1479 * call PyObject_GC_UnTrack twice on an object.
1480 */
1481 if (IS_TRACKED(op))
1482 _PyObject_GC_UNTRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001483}
1484
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001485/* for binary compatibility with 2.2 */
1486void
1487_PyObject_GC_UnTrack(PyObject *op)
1488{
1489 PyObject_GC_UnTrack(op);
1490}
1491
Neil Schemenauer43411b52001-08-30 00:05:51 +00001492PyObject *
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001493_PyObject_GC_Malloc(size_t basicsize)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001494{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001495 PyObject *op;
1496 PyGC_Head *g;
1497 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1498 return PyErr_NoMemory();
1499 g = (PyGC_Head *)PyObject_MALLOC(
1500 sizeof(PyGC_Head) + basicsize);
1501 if (g == NULL)
1502 return PyErr_NoMemory();
1503 g->gc.gc_refs = GC_UNTRACKED;
1504 generations[0].count++; /* number of allocated GC objects */
1505 if (generations[0].count > generations[0].threshold &&
1506 enabled &&
1507 generations[0].threshold &&
1508 !collecting &&
1509 !PyErr_Occurred()) {
1510 collecting = 1;
1511 collect_generations();
1512 collecting = 0;
1513 }
1514 op = FROM_GC(g);
1515 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001516}
1517
1518PyObject *
1519_PyObject_GC_New(PyTypeObject *tp)
1520{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001521 PyObject *op = _PyObject_GC_Malloc(_PyObject_SIZE(tp));
1522 if (op != NULL)
1523 op = PyObject_INIT(op, tp);
1524 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001525}
1526
1527PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001528_PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001529{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001530 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
1531 PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
1532 if (op != NULL)
1533 op = PyObject_INIT_VAR(op, tp, nitems);
1534 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001535}
1536
1537PyVarObject *
Martin v. Löwis41290682006-02-16 14:56:14 +00001538_PyObject_GC_Resize(PyVarObject *op, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001539{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001540 const size_t basicsize = _PyObject_VAR_SIZE(Py_TYPE(op), nitems);
1541 PyGC_Head *g = AS_GC(op);
1542 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1543 return (PyVarObject *)PyErr_NoMemory();
1544 g = (PyGC_Head *)PyObject_REALLOC(g, sizeof(PyGC_Head) + basicsize);
1545 if (g == NULL)
1546 return (PyVarObject *)PyErr_NoMemory();
1547 op = (PyVarObject *) FROM_GC(g);
1548 Py_SIZE(op) = nitems;
1549 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001550}
1551
1552void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001553PyObject_GC_Del(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001554{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001555 PyGC_Head *g = AS_GC(op);
1556 if (IS_TRACKED(op))
1557 gc_list_remove(g);
1558 if (generations[0].count > 0) {
1559 generations[0].count--;
1560 }
1561 PyObject_FREE(g);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001562}
1563
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001564/* for binary compatibility with 2.2 */
1565#undef _PyObject_GC_Del
1566void
1567_PyObject_GC_Del(PyObject *op)
1568{
1569 PyObject_GC_Del(op);
1570}