blob: 77c5c6ee7813675f2743a2226f630ae2926cb612 [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/
Neil Schemenauera7024e92008-07-15 19:24:01 +000012
13 The following mailing list threads provide a historical perspective on
14 the design of this module. Note that a fair amount of refinement has
15 occurred since those discussions.
16
17 http://mail.python.org/pipermail/python-dev/2000-March/002385.html
18 http://mail.python.org/pipermail/python-dev/2000-March/002434.html
19 http://mail.python.org/pipermail/python-dev/2000-March/002497.html
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000020
21 For a highlevel view of the collection process, read the collect
22 function.
23
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000024*/
25
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000026#include "Python.h"
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000027#include "frameobject.h" /* for PyFrame_ClearFreeList */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000028
Neil Schemenauer43411b52001-08-30 00:05:51 +000029/* Get an object's GC head */
30#define AS_GC(o) ((PyGC_Head *)(o)-1)
31
32/* Get the object given the GC head */
33#define FROM_GC(g) ((PyObject *)(((PyGC_Head *)g)+1))
34
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000035/*** Global GC state ***/
36
Neil Schemenauer2880ae52002-05-04 05:35:20 +000037struct gc_generation {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000038 PyGC_Head head;
39 int threshold; /* collection threshold */
40 int count; /* count of allocations or collections of younger
41 generations */
Neil Schemenauer2880ae52002-05-04 05:35:20 +000042};
43
44#define NUM_GENERATIONS 3
45#define GEN_HEAD(n) (&generations[n].head)
46
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000047/* linked lists of container objects */
Neil Schemenauer2880ae52002-05-04 05:35:20 +000048static struct gc_generation generations[NUM_GENERATIONS] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000049 /* PyGC_Head, threshold, count */
50 {{{GEN_HEAD(0), GEN_HEAD(0), 0}}, 700, 0},
51 {{{GEN_HEAD(1), GEN_HEAD(1), 0}}, 10, 0},
52 {{{GEN_HEAD(2), GEN_HEAD(2), 0}}, 10, 0},
Neil Schemenauer2880ae52002-05-04 05:35:20 +000053};
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000054
Neil Schemenauer2880ae52002-05-04 05:35:20 +000055PyGC_Head *_PyGC_generation0 = GEN_HEAD(0);
56
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +000057static int enabled = 1; /* automatic collection enabled? */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000058
Neil Schemenauer43411b52001-08-30 00:05:51 +000059/* true if we are currently running the collector */
Tim Petersbf384c22003-04-06 00:11:39 +000060static int collecting = 0;
Neil Schemenauer43411b52001-08-30 00:05:51 +000061
Tim Peters6fc13d92002-07-02 18:12:35 +000062/* list of uncollectable objects */
Tim Petersbf384c22003-04-06 00:11:39 +000063static PyObject *garbage = NULL;
Tim Peters6fc13d92002-07-02 18:12:35 +000064
65/* Python string to use if unhandled exception occurs */
Tim Petersbf384c22003-04-06 00:11:39 +000066static PyObject *gc_str = NULL;
Tim Peters6fc13d92002-07-02 18:12:35 +000067
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +000068/* a list of callbacks to be invoked when collection is performed */
69static PyObject *callbacks = NULL;
70
71/* This is the number of objects that survived the last full collection. It
Antoine Pitrou14b78f52009-01-09 22:27:08 +000072 approximates the number of long lived objects tracked by the GC.
73
74 (by "full collection", we mean a collection of the oldest generation).
75*/
76static Py_ssize_t long_lived_total = 0;
77
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +000078/* This is the number of objects that survived all "non-full" collections,
Antoine Pitrou14b78f52009-01-09 22:27:08 +000079 and are awaiting to undergo a full collection for the first time.
80
81*/
82static Py_ssize_t long_lived_pending = 0;
83
84/*
85 NOTE: about the counting of long-lived objects.
86
87 To limit the cost of garbage collection, there are two strategies;
88 - make each collection faster, e.g. by scanning fewer objects
89 - do less collections
90 This heuristic is about the latter strategy.
91
92 In addition to the various configurable thresholds, we only trigger a
93 full collection if the ratio
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000094 long_lived_pending / long_lived_total
Antoine Pitrou14b78f52009-01-09 22:27:08 +000095 is above a given value (hardwired to 25%).
96
97 The reason is that, while "non-full" collections (i.e., collections of
98 the young and middle generations) will always examine roughly the same
99 number of objects -- determined by the aforementioned thresholds --,
100 the cost of a full collection is proportional to the total number of
101 long-lived objects, which is virtually unbounded.
102
103 Indeed, it has been remarked that doing a full collection every
104 <constant number> of object creations entails a dramatic performance
105 degradation in workloads which consist in creating and storing lots of
106 long-lived objects (e.g. building a large list of GC-tracked objects would
107 show quadratic performance, instead of linear as expected: see issue #4074).
108
109 Using the above ratio, instead, yields amortized linear performance in
110 the total number of objects (the effect of which can be summarized
111 thusly: "each full garbage collection is more and more costly as the
112 number of objects grows, but we do fewer and fewer of them").
113
114 This heuristic was suggested by Martin von Löwis on python-dev in
115 June 2008. His original analysis and proposal can be found at:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000116 http://mail.python.org/pipermail/python-dev/2008-June/080579.html
Antoine Pitrou14b78f52009-01-09 22:27:08 +0000117*/
118
119
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000120/* set for debugging information */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000121#define DEBUG_STATS (1<<0) /* print collection statistics */
122#define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */
123#define DEBUG_UNCOLLECTABLE (1<<2) /* print uncollectable objects */
124#define DEBUG_SAVEALL (1<<5) /* save all garbage in gc.garbage */
125#define DEBUG_LEAK DEBUG_COLLECTABLE | \
126 DEBUG_UNCOLLECTABLE | \
127 DEBUG_SAVEALL
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000128static int debug;
Thomas Wouters477c8d52006-05-27 19:21:47 +0000129static PyObject *tmod = NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000130
Tim Peters6fc13d92002-07-02 18:12:35 +0000131/*--------------------------------------------------------------------------
132gc_refs values.
Neil Schemenauer43411b52001-08-30 00:05:51 +0000133
Tim Peters6fc13d92002-07-02 18:12:35 +0000134Between collections, every gc'ed object has one of two gc_refs values:
135
136GC_UNTRACKED
137 The initial state; objects returned by PyObject_GC_Malloc are in this
138 state. The object doesn't live in any generation list, and its
139 tp_traverse slot must not be called.
140
141GC_REACHABLE
142 The object lives in some generation list, and its tp_traverse is safe to
143 call. An object transitions to GC_REACHABLE when PyObject_GC_Track
144 is called.
145
146During a collection, gc_refs can temporarily take on other states:
147
148>= 0
149 At the start of a collection, update_refs() copies the true refcount
150 to gc_refs, for each object in the generation being collected.
151 subtract_refs() then adjusts gc_refs so that it equals the number of
152 times an object is referenced directly from outside the generation
153 being collected.
Martin v. Löwis774348c2002-11-09 19:54:06 +0000154 gc_refs remains >= 0 throughout these steps.
Tim Peters6fc13d92002-07-02 18:12:35 +0000155
156GC_TENTATIVELY_UNREACHABLE
157 move_unreachable() then moves objects not reachable (whether directly or
158 indirectly) from outside the generation into an "unreachable" set.
159 Objects that are found to be reachable have gc_refs set to GC_REACHABLE
160 again. Objects that are found to be unreachable have gc_refs set to
161 GC_TENTATIVELY_UNREACHABLE. It's "tentatively" because the pass doing
162 this can't be sure until it ends, and GC_TENTATIVELY_UNREACHABLE may
163 transition back to GC_REACHABLE.
164
165 Only objects with GC_TENTATIVELY_UNREACHABLE still set are candidates
166 for collection. If it's decided not to collect such an object (e.g.,
167 it has a __del__ method), its gc_refs is restored to GC_REACHABLE again.
168----------------------------------------------------------------------------
169*/
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170#define GC_UNTRACKED _PyGC_REFS_UNTRACKED
171#define GC_REACHABLE _PyGC_REFS_REACHABLE
172#define GC_TENTATIVELY_UNREACHABLE _PyGC_REFS_TENTATIVELY_UNREACHABLE
Tim Peters19b74c72002-07-01 03:52:19 +0000173
Tim Peters6fc13d92002-07-02 18:12:35 +0000174#define IS_TRACKED(o) ((AS_GC(o))->gc.gc_refs != GC_UNTRACKED)
Tim Peters19b74c72002-07-01 03:52:19 +0000175#define IS_REACHABLE(o) ((AS_GC(o))->gc.gc_refs == GC_REACHABLE)
176#define IS_TENTATIVELY_UNREACHABLE(o) ( \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 (AS_GC(o))->gc.gc_refs == GC_TENTATIVELY_UNREACHABLE)
Neil Schemenauera2b11ec2002-05-21 15:53:24 +0000178
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000179/*** list functions ***/
180
181static void
182gc_list_init(PyGC_Head *list)
183{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 list->gc.gc_prev = list;
185 list->gc.gc_next = list;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000186}
187
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000188static int
189gc_list_is_empty(PyGC_Head *list)
190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 return (list->gc.gc_next == list);
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000192}
193
Tim Peterse2d59182004-11-01 01:39:08 +0000194#if 0
195/* This became unused after gc_list_move() was introduced. */
196/* Append `node` to `list`. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000197static void
198gc_list_append(PyGC_Head *node, PyGC_Head *list)
199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 node->gc.gc_next = list;
201 node->gc.gc_prev = list->gc.gc_prev;
202 node->gc.gc_prev->gc.gc_next = node;
203 list->gc.gc_prev = node;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000204}
Tim Peterse2d59182004-11-01 01:39:08 +0000205#endif
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000206
Tim Peterse2d59182004-11-01 01:39:08 +0000207/* Remove `node` from the gc list it's currently in. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000208static void
209gc_list_remove(PyGC_Head *node)
210{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 node->gc.gc_prev->gc.gc_next = node->gc.gc_next;
212 node->gc.gc_next->gc.gc_prev = node->gc.gc_prev;
213 node->gc.gc_next = NULL; /* object is not currently tracked */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000214}
215
Tim Peterse2d59182004-11-01 01:39:08 +0000216/* Move `node` from the gc list it's currently in (which is not explicitly
217 * named here) to the end of `list`. This is semantically the same as
218 * gc_list_remove(node) followed by gc_list_append(node, list).
219 */
220static void
221gc_list_move(PyGC_Head *node, PyGC_Head *list)
222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 PyGC_Head *new_prev;
224 PyGC_Head *current_prev = node->gc.gc_prev;
225 PyGC_Head *current_next = node->gc.gc_next;
226 /* Unlink from current list. */
227 current_prev->gc.gc_next = current_next;
228 current_next->gc.gc_prev = current_prev;
229 /* Relink at end of new list. */
230 new_prev = node->gc.gc_prev = list->gc.gc_prev;
231 new_prev->gc.gc_next = list->gc.gc_prev = node;
232 node->gc.gc_next = list;
Tim Peterse2d59182004-11-01 01:39:08 +0000233}
234
235/* append list `from` onto list `to`; `from` becomes an empty list */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000236static void
237gc_list_merge(PyGC_Head *from, PyGC_Head *to)
238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 PyGC_Head *tail;
240 assert(from != to);
241 if (!gc_list_is_empty(from)) {
242 tail = to->gc.gc_prev;
243 tail->gc.gc_next = from->gc.gc_next;
244 tail->gc.gc_next->gc.gc_prev = tail;
245 to->gc.gc_prev = from->gc.gc_prev;
246 to->gc.gc_prev->gc.gc_next = to;
247 }
248 gc_list_init(from);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000249}
250
Neal Norwitz7b216c52006-03-04 20:01:53 +0000251static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000252gc_list_size(PyGC_Head *list)
253{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 PyGC_Head *gc;
255 Py_ssize_t n = 0;
256 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
257 n++;
258 }
259 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000260}
261
Tim Peters259272b2003-04-06 19:41:39 +0000262/* Append objects in a GC list to a Python list.
263 * Return 0 if all OK, < 0 if error (out of memory for list).
264 */
265static int
266append_objects(PyObject *py_list, PyGC_Head *gc_list)
267{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000268 PyGC_Head *gc;
269 for (gc = gc_list->gc.gc_next; gc != gc_list; gc = gc->gc.gc_next) {
270 PyObject *op = FROM_GC(gc);
271 if (op != py_list) {
272 if (PyList_Append(py_list, op)) {
273 return -1; /* exception */
274 }
275 }
276 }
277 return 0;
Tim Peters259272b2003-04-06 19:41:39 +0000278}
279
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000280/*** end of list stuff ***/
281
282
Tim Peters19b74c72002-07-01 03:52:19 +0000283/* Set all gc_refs = ob_refcnt. After this, gc_refs is > 0 for all objects
284 * in containers, and is GC_REACHABLE for all tracked gc objects not in
285 * containers.
Tim Peters88396172002-06-30 17:56:40 +0000286 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000287static void
288update_refs(PyGC_Head *containers)
289{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000290 PyGC_Head *gc = containers->gc.gc_next;
291 for (; gc != containers; gc = gc->gc.gc_next) {
292 assert(gc->gc.gc_refs == GC_REACHABLE);
293 gc->gc.gc_refs = Py_REFCNT(FROM_GC(gc));
294 /* Python's cyclic gc should never see an incoming refcount
295 * of 0: if something decref'ed to 0, it should have been
296 * deallocated immediately at that time.
297 * Possible cause (if the assert triggers): a tp_dealloc
298 * routine left a gc-aware object tracked during its teardown
299 * phase, and did something-- or allowed something to happen --
300 * that called back into Python. gc can trigger then, and may
301 * see the still-tracked dying object. Before this assert
302 * was added, such mistakes went on to allow gc to try to
303 * delete the object again. In a debug build, that caused
304 * a mysterious segfault, when _Py_ForgetReference tried
305 * to remove the object from the doubly-linked list of all
306 * objects a second time. In a release build, an actual
307 * double deallocation occurred, which leads to corruption
308 * of the allocator's internal bookkeeping pointers. That's
309 * so serious that maybe this should be a release-build
310 * check instead of an assert?
311 */
312 assert(gc->gc.gc_refs != 0);
313 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000314}
315
Tim Peters19b74c72002-07-01 03:52:19 +0000316/* A traversal callback for subtract_refs. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000317static int
318visit_decref(PyObject *op, void *data)
319{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000320 assert(op != NULL);
321 if (PyObject_IS_GC(op)) {
322 PyGC_Head *gc = AS_GC(op);
323 /* We're only interested in gc_refs for objects in the
324 * generation being collected, which can be recognized
325 * because only they have positive gc_refs.
326 */
327 assert(gc->gc.gc_refs != 0); /* else refcount was too small */
328 if (gc->gc.gc_refs > 0)
329 gc->gc.gc_refs--;
330 }
331 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000332}
333
Tim Peters19b74c72002-07-01 03:52:19 +0000334/* Subtract internal references from gc_refs. After this, gc_refs is >= 0
335 * for all objects in containers, and is GC_REACHABLE for all tracked gc
336 * objects not in containers. The ones with gc_refs > 0 are directly
337 * reachable from outside containers, and so can't be collected.
338 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000339static void
340subtract_refs(PyGC_Head *containers)
341{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 traverseproc traverse;
343 PyGC_Head *gc = containers->gc.gc_next;
344 for (; gc != containers; gc=gc->gc.gc_next) {
345 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
346 (void) traverse(FROM_GC(gc),
347 (visitproc)visit_decref,
348 NULL);
349 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000350}
351
Tim Peters19b74c72002-07-01 03:52:19 +0000352/* A traversal callback for move_unreachable. */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000353static int
Tim Peters19b74c72002-07-01 03:52:19 +0000354visit_reachable(PyObject *op, PyGC_Head *reachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000356 if (PyObject_IS_GC(op)) {
357 PyGC_Head *gc = AS_GC(op);
358 const Py_ssize_t gc_refs = gc->gc.gc_refs;
Tim Peters19b74c72002-07-01 03:52:19 +0000359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000360 if (gc_refs == 0) {
361 /* This is in move_unreachable's 'young' list, but
362 * the traversal hasn't yet gotten to it. All
363 * we need to do is tell move_unreachable that it's
364 * reachable.
365 */
366 gc->gc.gc_refs = 1;
367 }
368 else if (gc_refs == GC_TENTATIVELY_UNREACHABLE) {
369 /* This had gc_refs = 0 when move_unreachable got
370 * to it, but turns out it's reachable after all.
371 * Move it back to move_unreachable's 'young' list,
372 * and move_unreachable will eventually get to it
373 * again.
374 */
375 gc_list_move(gc, reachable);
376 gc->gc.gc_refs = 1;
377 }
378 /* Else there's nothing to do.
379 * If gc_refs > 0, it must be in move_unreachable's 'young'
380 * list, and move_unreachable will eventually get to it.
381 * If gc_refs == GC_REACHABLE, it's either in some other
382 * generation so we don't care about it, or move_unreachable
383 * already dealt with it.
384 * If gc_refs == GC_UNTRACKED, it must be ignored.
385 */
386 else {
387 assert(gc_refs > 0
388 || gc_refs == GC_REACHABLE
389 || gc_refs == GC_UNTRACKED);
390 }
391 }
392 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000393}
394
Tim Peters19b74c72002-07-01 03:52:19 +0000395/* Move the unreachable objects from young to unreachable. After this,
396 * all objects in young have gc_refs = GC_REACHABLE, and all objects in
397 * unreachable have gc_refs = GC_TENTATIVELY_UNREACHABLE. All tracked
398 * gc objects not in young or unreachable still have gc_refs = GC_REACHABLE.
399 * All objects in young after this are directly or indirectly reachable
400 * from outside the original young; and all objects in unreachable are
401 * not.
Tim Peters88396172002-06-30 17:56:40 +0000402 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000403static void
Tim Peters19b74c72002-07-01 03:52:19 +0000404move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000405{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 PyGC_Head *gc = young->gc.gc_next;
Tim Peters19b74c72002-07-01 03:52:19 +0000407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000408 /* Invariants: all objects "to the left" of us in young have gc_refs
409 * = GC_REACHABLE, and are indeed reachable (directly or indirectly)
410 * from outside the young list as it was at entry. All other objects
411 * from the original young "to the left" of us are in unreachable now,
412 * and have gc_refs = GC_TENTATIVELY_UNREACHABLE. All objects to the
413 * left of us in 'young' now have been scanned, and no objects here
414 * or to the right have been scanned yet.
415 */
Tim Peters19b74c72002-07-01 03:52:19 +0000416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 while (gc != young) {
418 PyGC_Head *next;
Tim Peters19b74c72002-07-01 03:52:19 +0000419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 if (gc->gc.gc_refs) {
421 /* gc is definitely reachable from outside the
422 * original 'young'. Mark it as such, and traverse
423 * its pointers to find any other objects that may
424 * be directly reachable from it. Note that the
425 * call to tp_traverse may append objects to young,
426 * so we have to wait until it returns to determine
427 * the next object to visit.
428 */
429 PyObject *op = FROM_GC(gc);
430 traverseproc traverse = Py_TYPE(op)->tp_traverse;
431 assert(gc->gc.gc_refs > 0);
432 gc->gc.gc_refs = GC_REACHABLE;
433 (void) traverse(op,
434 (visitproc)visit_reachable,
435 (void *)young);
436 next = gc->gc.gc_next;
437 if (PyTuple_CheckExact(op)) {
438 _PyTuple_MaybeUntrack(op);
439 }
440 else if (PyDict_CheckExact(op)) {
441 _PyDict_MaybeUntrack(op);
442 }
443 }
444 else {
445 /* This *may* be unreachable. To make progress,
446 * assume it is. gc isn't directly reachable from
447 * any object we've already traversed, but may be
448 * reachable from an object we haven't gotten to yet.
449 * visit_reachable will eventually move gc back into
450 * young if that's so, and we'll see it again.
451 */
452 next = gc->gc.gc_next;
453 gc_list_move(gc, unreachable);
454 gc->gc.gc_refs = GC_TENTATIVELY_UNREACHABLE;
455 }
456 gc = next;
457 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000458}
459
Amaury Forgeot d'Arcad8dcd52007-12-10 23:58:35 +0000460/* Return true if object has a finalization method. */
Neil Schemenauera765c122001-11-01 17:35:23 +0000461static int
462has_finalizer(PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 if (PyGen_CheckExact(op))
465 return PyGen_NeedsFinalizing((PyGenObject *)op);
466 else
467 return op->ob_type->tp_del != NULL;
Neil Schemenauera765c122001-11-01 17:35:23 +0000468}
469
Tim Petersead8b7a2004-10-30 23:09:22 +0000470/* Move the objects in unreachable with __del__ methods into `finalizers`.
471 * Objects moved into `finalizers` have gc_refs set to GC_REACHABLE; the
472 * objects remaining in unreachable are left at GC_TENTATIVELY_UNREACHABLE.
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000473 */
Neil Schemenauera765c122001-11-01 17:35:23 +0000474static void
Tim Petersead8b7a2004-10-30 23:09:22 +0000475move_finalizers(PyGC_Head *unreachable, PyGC_Head *finalizers)
Neil Schemenauera765c122001-11-01 17:35:23 +0000476{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 PyGC_Head *gc;
478 PyGC_Head *next;
Tim Petersf6b80452003-04-07 19:21:15 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* March over unreachable. Move objects with finalizers into
481 * `finalizers`.
482 */
483 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
484 PyObject *op = FROM_GC(gc);
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 assert(IS_TENTATIVELY_UNREACHABLE(op));
487 next = gc->gc.gc_next;
Tim Petersf6ae7a42003-04-05 18:40:50 +0000488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 if (has_finalizer(op)) {
490 gc_list_move(gc, finalizers);
491 gc->gc.gc_refs = GC_REACHABLE;
492 }
493 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000494}
495
Tim Peters19b74c72002-07-01 03:52:19 +0000496/* A traversal callback for move_finalizer_reachable. */
497static int
498visit_move(PyObject *op, PyGC_Head *tolist)
499{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 if (PyObject_IS_GC(op)) {
501 if (IS_TENTATIVELY_UNREACHABLE(op)) {
502 PyGC_Head *gc = AS_GC(op);
503 gc_list_move(gc, tolist);
504 gc->gc.gc_refs = GC_REACHABLE;
505 }
506 }
507 return 0;
Tim Peters19b74c72002-07-01 03:52:19 +0000508}
509
510/* Move objects that are reachable from finalizers, from the unreachable set
Tim Petersf6b80452003-04-07 19:21:15 +0000511 * into finalizers set.
Tim Peters19b74c72002-07-01 03:52:19 +0000512 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000513static void
Tim Petersf6b80452003-04-07 19:21:15 +0000514move_finalizer_reachable(PyGC_Head *finalizers)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000515{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 traverseproc traverse;
517 PyGC_Head *gc = finalizers->gc.gc_next;
518 for (; gc != finalizers; gc = gc->gc.gc_next) {
519 /* Note that the finalizers list may grow during this. */
520 traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
521 (void) traverse(FROM_GC(gc),
522 (visitproc)visit_move,
523 (void *)finalizers);
524 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000525}
526
Tim Petersead8b7a2004-10-30 23:09:22 +0000527/* Clear all weakrefs to unreachable objects, and if such a weakref has a
528 * callback, invoke it if necessary. Note that it's possible for such
529 * weakrefs to be outside the unreachable set -- indeed, those are precisely
530 * the weakrefs whose callbacks must be invoked. See gc_weakref.txt for
531 * overview & some details. Some weakrefs with callbacks may be reclaimed
532 * directly by this routine; the number reclaimed is the return value. Other
533 * weakrefs with callbacks may be moved into the `old` generation. Objects
534 * moved into `old` have gc_refs set to GC_REACHABLE; the objects remaining in
535 * unreachable are left at GC_TENTATIVELY_UNREACHABLE. When this returns,
536 * no object in `unreachable` is weakly referenced anymore.
Tim Peters403a2032003-11-20 21:21:46 +0000537 */
538static int
Tim Petersead8b7a2004-10-30 23:09:22 +0000539handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
Tim Peters403a2032003-11-20 21:21:46 +0000540{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 PyGC_Head *gc;
542 PyObject *op; /* generally FROM_GC(gc) */
543 PyWeakReference *wr; /* generally a cast of op */
544 PyGC_Head wrcb_to_call; /* weakrefs with callbacks to call */
545 PyGC_Head *next;
546 int num_freed = 0;
Tim Peters403a2032003-11-20 21:21:46 +0000547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000548 gc_list_init(&wrcb_to_call);
Tim Peters403a2032003-11-20 21:21:46 +0000549
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 /* Clear all weakrefs to the objects in unreachable. If such a weakref
551 * also has a callback, move it into `wrcb_to_call` if the callback
552 * needs to be invoked. Note that we cannot invoke any callbacks until
553 * all weakrefs to unreachable objects are cleared, lest the callback
554 * resurrect an unreachable object via a still-active weakref. We
555 * make another pass over wrcb_to_call, invoking callbacks, after this
556 * pass completes.
557 */
558 for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
559 PyWeakReference **wrlist;
Tim Petersead8b7a2004-10-30 23:09:22 +0000560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 op = FROM_GC(gc);
562 assert(IS_TENTATIVELY_UNREACHABLE(op));
563 next = gc->gc.gc_next;
Tim Petersead8b7a2004-10-30 23:09:22 +0000564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 if (! PyType_SUPPORTS_WEAKREFS(Py_TYPE(op)))
566 continue;
Tim Petersead8b7a2004-10-30 23:09:22 +0000567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000568 /* It supports weakrefs. Does it have any? */
569 wrlist = (PyWeakReference **)
570 PyObject_GET_WEAKREFS_LISTPTR(op);
Tim Petersead8b7a2004-10-30 23:09:22 +0000571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 /* `op` may have some weakrefs. March over the list, clear
573 * all the weakrefs, and move the weakrefs with callbacks
574 * that must be called into wrcb_to_call.
575 */
576 for (wr = *wrlist; wr != NULL; wr = *wrlist) {
577 PyGC_Head *wrasgc; /* AS_GC(wr) */
Tim Petersead8b7a2004-10-30 23:09:22 +0000578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000579 /* _PyWeakref_ClearRef clears the weakref but leaves
580 * the callback pointer intact. Obscure: it also
581 * changes *wrlist.
582 */
583 assert(wr->wr_object == op);
584 _PyWeakref_ClearRef(wr);
585 assert(wr->wr_object == Py_None);
586 if (wr->wr_callback == NULL)
587 continue; /* no callback */
Tim Petersead8b7a2004-10-30 23:09:22 +0000588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 /* Headache time. `op` is going away, and is weakly referenced by
590 * `wr`, which has a callback. Should the callback be invoked? If wr
591 * is also trash, no:
592 *
593 * 1. There's no need to call it. The object and the weakref are
594 * both going away, so it's legitimate to pretend the weakref is
595 * going away first. The user has to ensure a weakref outlives its
596 * referent if they want a guarantee that the wr callback will get
597 * invoked.
598 *
599 * 2. It may be catastrophic to call it. If the callback is also in
600 * cyclic trash (CT), then although the CT is unreachable from
601 * outside the current generation, CT may be reachable from the
602 * callback. Then the callback could resurrect insane objects.
603 *
604 * Since the callback is never needed and may be unsafe in this case,
605 * wr is simply left in the unreachable set. Note that because we
606 * already called _PyWeakref_ClearRef(wr), its callback will never
607 * trigger.
608 *
609 * OTOH, if wr isn't part of CT, we should invoke the callback: the
610 * weakref outlived the trash. Note that since wr isn't CT in this
611 * case, its callback can't be CT either -- wr acted as an external
612 * root to this generation, and therefore its callback did too. So
613 * nothing in CT is reachable from the callback either, so it's hard
614 * to imagine how calling it later could create a problem for us. wr
615 * is moved to wrcb_to_call in this case.
616 */
617 if (IS_TENTATIVELY_UNREACHABLE(wr))
618 continue;
619 assert(IS_REACHABLE(wr));
Tim Peterscc2a8662004-10-31 22:12:43 +0000620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 /* Create a new reference so that wr can't go away
622 * before we can process it again.
623 */
624 Py_INCREF(wr);
Tim Petersead8b7a2004-10-30 23:09:22 +0000625
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 /* Move wr to wrcb_to_call, for the next pass. */
627 wrasgc = AS_GC(wr);
628 assert(wrasgc != next); /* wrasgc is reachable, but
629 next isn't, so they can't
630 be the same */
631 gc_list_move(wrasgc, &wrcb_to_call);
632 }
633 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 /* Invoke the callbacks we decided to honor. It's safe to invoke them
636 * because they can't reference unreachable objects.
637 */
638 while (! gc_list_is_empty(&wrcb_to_call)) {
639 PyObject *temp;
640 PyObject *callback;
Tim Petersead8b7a2004-10-30 23:09:22 +0000641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 gc = wrcb_to_call.gc.gc_next;
643 op = FROM_GC(gc);
644 assert(IS_REACHABLE(op));
645 assert(PyWeakref_Check(op));
646 wr = (PyWeakReference *)op;
647 callback = wr->wr_callback;
648 assert(callback != NULL);
Tim Petersead8b7a2004-10-30 23:09:22 +0000649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 /* copy-paste of weakrefobject.c's handle_callback() */
651 temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
652 if (temp == NULL)
653 PyErr_WriteUnraisable(callback);
654 else
655 Py_DECREF(temp);
Tim Petersead8b7a2004-10-30 23:09:22 +0000656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 /* Give up the reference we created in the first pass. When
658 * op's refcount hits 0 (which it may or may not do right now),
659 * op's tp_dealloc will decref op->wr_callback too. Note
660 * that the refcount probably will hit 0 now, and because this
661 * weakref was reachable to begin with, gc didn't already
662 * add it to its count of freed objects. Example: a reachable
663 * weak value dict maps some key to this reachable weakref.
664 * The callback removes this key->weakref mapping from the
665 * dict, leaving no other references to the weakref (excepting
666 * ours).
667 */
668 Py_DECREF(op);
669 if (wrcb_to_call.gc.gc_next == gc) {
670 /* object is still alive -- move it */
671 gc_list_move(gc, old);
672 }
673 else
674 ++num_freed;
675 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 return num_freed;
Tim Peters403a2032003-11-20 21:21:46 +0000678}
679
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000680static void
Jeremy Hylton06257772000-08-31 15:10:24 +0000681debug_cycle(char *msg, PyObject *op)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000682{
Victor Stinner499dfcf2011-03-21 13:26:24 +0100683 PySys_FormatStderr("gc: %s <%s %p>\n",
684 msg, Py_TYPE(op)->tp_name, op);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000685}
686
Tim Petersbf384c22003-04-06 00:11:39 +0000687/* Handle uncollectable garbage (cycles with finalizers, and stuff reachable
688 * only from such cycles).
Tim Petersf6b80452003-04-07 19:21:15 +0000689 * If DEBUG_SAVEALL, all objects in finalizers are appended to the module
690 * garbage list (a Python list), else only the objects in finalizers with
691 * __del__ methods are appended to garbage. All objects in finalizers are
692 * merged into the old list regardless.
Tim Peters259272b2003-04-06 19:41:39 +0000693 * Returns 0 if all OK, <0 on error (out of memory to grow the garbage list).
694 * The finalizers list is made empty on a successful return.
Tim Petersbf384c22003-04-06 00:11:39 +0000695 */
Tim Peters259272b2003-04-06 19:41:39 +0000696static int
Tim Petersf6b80452003-04-07 19:21:15 +0000697handle_finalizers(PyGC_Head *finalizers, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000698{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 PyGC_Head *gc = finalizers->gc.gc_next;
Tim Petersf6b80452003-04-07 19:21:15 +0000700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 if (garbage == NULL) {
702 garbage = PyList_New(0);
703 if (garbage == NULL)
704 Py_FatalError("gc couldn't create gc.garbage list");
705 }
706 for (; gc != finalizers; gc = gc->gc.gc_next) {
707 PyObject *op = FROM_GC(gc);
Tim Petersf6b80452003-04-07 19:21:15 +0000708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 if ((debug & DEBUG_SAVEALL) || has_finalizer(op)) {
710 if (PyList_Append(garbage, op) < 0)
711 return -1;
712 }
713 }
Tim Petersf6b80452003-04-07 19:21:15 +0000714
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 gc_list_merge(finalizers, old);
716 return 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000717}
718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719/* Break reference cycles by clearing the containers involved. This is
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000720 * tricky business as the lists can be changing and we don't know which
Tim Peters19b74c72002-07-01 03:52:19 +0000721 * objects may be freed. It is possible I screwed something up here.
722 */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000723static void
Jeremy Hyltonce136e92003-04-04 19:59:06 +0000724delete_garbage(PyGC_Head *collectable, PyGC_Head *old)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000725{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 inquiry clear;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 while (!gc_list_is_empty(collectable)) {
729 PyGC_Head *gc = collectable->gc.gc_next;
730 PyObject *op = FROM_GC(gc);
Tim Peters88396172002-06-30 17:56:40 +0000731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000732 assert(IS_TENTATIVELY_UNREACHABLE(op));
733 if (debug & DEBUG_SAVEALL) {
734 PyList_Append(garbage, op);
735 }
736 else {
737 if ((clear = Py_TYPE(op)->tp_clear) != NULL) {
738 Py_INCREF(op);
739 clear(op);
740 Py_DECREF(op);
741 }
742 }
743 if (collectable->gc.gc_next == gc) {
744 /* object is still alive, move it, it may die later */
745 gc_list_move(gc, old);
746 gc->gc.gc_refs = GC_REACHABLE;
747 }
748 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000749}
750
Christian Heimesa156e092008-02-16 07:38:31 +0000751/* Clear all free lists
752 * All free lists are cleared during the collection of the highest generation.
753 * Allocated items in the free list may keep a pymalloc arena occupied.
754 * Clearing the free lists may give back memory to the OS earlier.
755 */
756static void
757clear_freelists(void)
758{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 (void)PyMethod_ClearFreeList();
760 (void)PyFrame_ClearFreeList();
761 (void)PyCFunction_ClearFreeList();
762 (void)PyTuple_ClearFreeList();
763 (void)PyUnicode_ClearFreeList();
764 (void)PyFloat_ClearFreeList();
Antoine Pitrou9a812cb2011-11-15 00:00:12 +0100765 (void)PyList_ClearFreeList();
766 (void)PyDict_ClearFreeList();
Antoine Pitrou093ce9c2011-12-16 11:24:27 +0100767 (void)PySet_ClearFreeList();
Christian Heimesa156e092008-02-16 07:38:31 +0000768}
769
Antoine Pitrou621601a2008-12-17 23:18:19 +0000770static double
771get_time(void)
772{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 double result = 0;
774 if (tmod != NULL) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200775 _Py_IDENTIFIER(time);
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200776
777 PyObject *f = _PyObject_CallMethodId(tmod, &PyId_time, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 if (f == NULL) {
779 PyErr_Clear();
780 }
781 else {
782 if (PyFloat_Check(f))
783 result = PyFloat_AsDouble(f);
784 Py_DECREF(f);
785 }
786 }
787 return result;
Antoine Pitrou621601a2008-12-17 23:18:19 +0000788}
789
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000790/* This is the main function. Read this to understand how the
791 * collection process works. */
Neal Norwitz7b216c52006-03-04 20:01:53 +0000792static Py_ssize_t
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +0000793collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000794{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 int i;
796 Py_ssize_t m = 0; /* # objects collected */
797 Py_ssize_t n = 0; /* # unreachable objects that couldn't be collected */
798 PyGC_Head *young; /* the generation we are examining */
799 PyGC_Head *old; /* next older generation */
800 PyGC_Head unreachable; /* non-problematic unreachable trash */
801 PyGC_Head finalizers; /* objects with, & reachable from, __del__ */
802 PyGC_Head *gc;
803 double t1 = 0.0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000804
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000805 if (debug & DEBUG_STATS) {
806 PySys_WriteStderr("gc: collecting generation %d...\n",
807 generation);
808 PySys_WriteStderr("gc: objects in each generation:");
809 for (i = 0; i < NUM_GENERATIONS; i++)
810 PySys_WriteStderr(" %" PY_FORMAT_SIZE_T "d",
811 gc_list_size(GEN_HEAD(i)));
812 t1 = get_time();
813 PySys_WriteStderr("\n");
814 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 /* update collection and allocation counters */
817 if (generation+1 < NUM_GENERATIONS)
818 generations[generation+1].count += 1;
819 for (i = 0; i <= generation; i++)
820 generations[i].count = 0;
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 /* merge younger generations with one we are currently collecting */
823 for (i = 0; i < generation; i++) {
824 gc_list_merge(GEN_HEAD(i), GEN_HEAD(generation));
825 }
Neil Schemenauer2880ae52002-05-04 05:35:20 +0000826
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000827 /* handy references */
828 young = GEN_HEAD(generation);
829 if (generation < NUM_GENERATIONS-1)
830 old = GEN_HEAD(generation+1);
831 else
832 old = young;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 /* Using ob_refcnt and gc_refs, calculate which objects in the
835 * container set are reachable from outside the set (i.e., have a
836 * refcount greater than 0 when all the references within the
837 * set are taken into account).
838 */
839 update_refs(young);
840 subtract_refs(young);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000842 /* Leave everything reachable from outside young in young, and move
843 * everything else (in young) to unreachable.
844 * NOTE: This used to move the reachable objects into a reachable
845 * set instead. But most things usually turn out to be reachable,
846 * so it's more efficient to move the unreachable things.
847 */
848 gc_list_init(&unreachable);
849 move_unreachable(young, &unreachable);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 /* Move reachable objects to next generation. */
852 if (young != old) {
853 if (generation == NUM_GENERATIONS - 2) {
854 long_lived_pending += gc_list_size(young);
855 }
856 gc_list_merge(young, old);
857 }
858 else {
859 long_lived_pending = 0;
860 long_lived_total = gc_list_size(young);
861 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 /* All objects in unreachable are trash, but objects reachable from
864 * finalizers can't safely be deleted. Python programmers should take
865 * care not to create such things. For Python, finalizers means
866 * instance objects with __del__ methods. Weakrefs with callbacks
867 * can also call arbitrary Python code but they will be dealt with by
868 * handle_weakrefs().
869 */
870 gc_list_init(&finalizers);
871 move_finalizers(&unreachable, &finalizers);
872 /* finalizers contains the unreachable objects with a finalizer;
873 * unreachable objects reachable *from* those are also uncollectable,
874 * and we move those into the finalizers list too.
875 */
876 move_finalizer_reachable(&finalizers);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 /* Collect statistics on collectable objects found and print
879 * debugging information.
880 */
881 for (gc = unreachable.gc.gc_next; gc != &unreachable;
882 gc = gc->gc.gc_next) {
883 m++;
884 if (debug & DEBUG_COLLECTABLE) {
885 debug_cycle("collectable", FROM_GC(gc));
886 }
887 }
Tim Petersead8b7a2004-10-30 23:09:22 +0000888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 /* Clear weakrefs and invoke callbacks as necessary. */
890 m += handle_weakrefs(&unreachable, old);
Tim Petersead8b7a2004-10-30 23:09:22 +0000891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 /* Call tp_clear on objects in the unreachable set. This will cause
893 * the reference cycles to be broken. It may also cause some objects
894 * in finalizers to be freed.
895 */
896 delete_garbage(&unreachable, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 /* Collect statistics on uncollectable objects found and print
899 * debugging information. */
900 for (gc = finalizers.gc.gc_next;
901 gc != &finalizers;
902 gc = gc->gc.gc_next) {
903 n++;
904 if (debug & DEBUG_UNCOLLECTABLE)
905 debug_cycle("uncollectable", FROM_GC(gc));
906 }
907 if (debug & DEBUG_STATS) {
908 double t2 = get_time();
909 if (m == 0 && n == 0)
910 PySys_WriteStderr("gc: done");
911 else
912 PySys_WriteStderr(
913 "gc: done, "
914 "%" PY_FORMAT_SIZE_T "d unreachable, "
915 "%" PY_FORMAT_SIZE_T "d uncollectable",
916 n+m, n);
917 if (t1 && t2) {
918 PySys_WriteStderr(", %.4fs elapsed", t2-t1);
919 }
920 PySys_WriteStderr(".\n");
921 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 /* Append instances in the uncollectable set to a Python
924 * reachable list of garbage. The programmer has to deal with
925 * this if they insist on creating this type of structure.
926 */
927 (void)handle_finalizers(&finalizers, old);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 /* Clear free list only during the collection of the highest
930 * generation */
931 if (generation == NUM_GENERATIONS-1) {
932 clear_freelists();
933 }
Christian Heimesa156e092008-02-16 07:38:31 +0000934
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 if (PyErr_Occurred()) {
936 if (gc_str == NULL)
937 gc_str = PyUnicode_FromString("garbage collection");
938 PyErr_WriteUnraisable(gc_str);
939 Py_FatalError("unexpected exception during garbage collection");
940 }
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +0000941
942 if (n_collected)
943 *n_collected = m;
944 if (n_uncollectable)
945 *n_uncollectable = n;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 return n+m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +0000947}
948
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +0000949/* Invoke progress callbacks to notify clients that garbage collection
950 * is starting or stopping
951 */
952static void
953invoke_gc_callback(const char *phase, int generation,
954 Py_ssize_t collected, Py_ssize_t uncollectable)
955{
956 Py_ssize_t i;
957 PyObject *info = NULL;
958
959 /* we may get called very early */
960 if (callbacks == NULL)
961 return;
962 /* The local variable cannot be rebound, check it for sanity */
963 assert(callbacks != NULL && PyList_CheckExact(callbacks));
964 if (PyList_GET_SIZE(callbacks) != 0) {
965 info = Py_BuildValue("{sisnsn}",
966 "generation", generation,
967 "collected", collected,
968 "uncollectable", uncollectable);
969 if (info == NULL) {
970 PyErr_WriteUnraisable(NULL);
971 return;
972 }
973 }
974 for (i=0; i<PyList_GET_SIZE(callbacks); i++) {
975 PyObject *r, *cb = PyList_GET_ITEM(callbacks, i);
976 Py_INCREF(cb); /* make sure cb doesn't go away */
977 r = PyObject_CallFunction(cb, "sO", phase, info);
978 Py_XDECREF(r);
979 if (r == NULL)
980 PyErr_WriteUnraisable(cb);
981 Py_DECREF(cb);
982 }
983 Py_XDECREF(info);
984}
985
986/* Perform garbage collection of a generation and invoke
987 * progress callbacks.
988 */
989static Py_ssize_t
990collect_with_callback(int generation)
991{
992 Py_ssize_t result, collected, uncollectable;
993 invoke_gc_callback("start", generation, 0, 0);
994 result = collect(generation, &collected, &uncollectable);
995 invoke_gc_callback("stop", generation, collected, uncollectable);
996 return result;
997}
998
Neal Norwitz7b216c52006-03-04 20:01:53 +0000999static Py_ssize_t
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001000collect_generations(void)
1001{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001002 int i;
1003 Py_ssize_t n = 0;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001004
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 /* Find the oldest generation (highest numbered) where the count
1006 * exceeds the threshold. Objects in the that generation and
1007 * generations younger than it will be collected. */
1008 for (i = NUM_GENERATIONS-1; i >= 0; i--) {
1009 if (generations[i].count > generations[i].threshold) {
1010 /* Avoid quadratic performance degradation in number
1011 of tracked objects. See comments at the beginning
1012 of this file, and issue #4074.
1013 */
1014 if (i == NUM_GENERATIONS - 1
1015 && long_lived_pending < long_lived_total / 4)
1016 continue;
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +00001017 n = collect_with_callback(i);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 break;
1019 }
1020 }
1021 return n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001022}
1023
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001024PyDoc_STRVAR(gc_enable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001025"enable() -> None\n"
1026"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001027"Enable automatic garbage collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001028
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001029static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001030gc_enable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001031{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 enabled = 1;
1033 Py_INCREF(Py_None);
1034 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001035}
1036
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001037PyDoc_STRVAR(gc_disable__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001038"disable() -> None\n"
1039"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001040"Disable automatic garbage collection.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001041
1042static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001043gc_disable(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001044{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001045 enabled = 0;
1046 Py_INCREF(Py_None);
1047 return Py_None;
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001048}
1049
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001050PyDoc_STRVAR(gc_isenabled__doc__,
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001051"isenabled() -> status\n"
1052"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001053"Returns true if automatic garbage collection is enabled.\n");
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001054
1055static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001056gc_isenabled(PyObject *self, PyObject *noargs)
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 return PyBool_FromLong((long)enabled);
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001059}
1060
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001061PyDoc_STRVAR(gc_collect__doc__,
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001062"collect([generation]) -> n\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001063"\n"
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001064"With no arguments, run a full collection. The optional argument\n"
1065"may be an integer specifying which generation to collect. A ValueError\n"
1066"is raised if the generation number is invalid.\n\n"
1067"The number of unreachable objects is returned.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001068
1069static PyObject *
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001070gc_collect(PyObject *self, PyObject *args, PyObject *kws)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001071{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 static char *keywords[] = {"generation", NULL};
1073 int genarg = NUM_GENERATIONS - 1;
1074 Py_ssize_t n;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 if (!PyArg_ParseTupleAndKeywords(args, kws, "|i", keywords, &genarg))
1077 return NULL;
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 else if (genarg < 0 || genarg >= NUM_GENERATIONS) {
1080 PyErr_SetString(PyExc_ValueError, "invalid generation");
1081 return NULL;
1082 }
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 if (collecting)
1085 n = 0; /* already collecting, don't do anything */
1086 else {
1087 collecting = 1;
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +00001088 n = collect_with_callback(genarg);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 collecting = 0;
1090 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 return PyLong_FromSsize_t(n);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001093}
1094
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001095PyDoc_STRVAR(gc_set_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001096"set_debug(flags) -> None\n"
1097"\n"
1098"Set the garbage collection debugging flags. Debugging information is\n"
1099"written to sys.stderr.\n"
1100"\n"
1101"flags is an integer and can have the following bits turned on:\n"
1102"\n"
1103" DEBUG_STATS - Print statistics during collection.\n"
1104" DEBUG_COLLECTABLE - Print collectable objects found.\n"
1105" DEBUG_UNCOLLECTABLE - Print unreachable but uncollectable objects found.\n"
Neil Schemenauer544de1e2000-09-22 15:22:38 +00001106" DEBUG_SAVEALL - Save objects to gc.garbage rather than freeing them.\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001107" DEBUG_LEAK - Debug leaking programs (everything but STATS).\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001108
1109static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001110gc_set_debug(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001111{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 if (!PyArg_ParseTuple(args, "i:set_debug", &debug))
1113 return NULL;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001114
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 Py_INCREF(Py_None);
1116 return Py_None;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001117}
1118
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001119PyDoc_STRVAR(gc_get_debug__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001120"get_debug() -> flags\n"
1121"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001122"Get the garbage collection debugging flags.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001123
1124static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001125gc_get_debug(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001126{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 return Py_BuildValue("i", debug);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001128}
1129
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001130PyDoc_STRVAR(gc_set_thresh__doc__,
Neal Norwitz2a47c0f2002-01-29 00:53:41 +00001131"set_threshold(threshold0, [threshold1, threshold2]) -> None\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001132"\n"
1133"Sets the collection thresholds. Setting threshold0 to zero disables\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001134"collection.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001135
1136static PyObject *
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001137gc_set_thresh(PyObject *self, PyObject *args)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 int i;
1140 if (!PyArg_ParseTuple(args, "i|ii:set_threshold",
1141 &generations[0].threshold,
1142 &generations[1].threshold,
1143 &generations[2].threshold))
1144 return NULL;
1145 for (i = 2; i < NUM_GENERATIONS; i++) {
1146 /* generations higher than 2 get the same threshold */
1147 generations[i].threshold = generations[2].threshold;
1148 }
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +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_thresh__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001155"get_threshold() -> (threshold0, threshold1, threshold2)\n"
1156"\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001157"Return the current collection thresholds\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001158
1159static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001160gc_get_thresh(PyObject *self, PyObject *noargs)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001162 return Py_BuildValue("(iii)",
1163 generations[0].threshold,
1164 generations[1].threshold,
1165 generations[2].threshold);
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001166}
1167
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001168PyDoc_STRVAR(gc_get_count__doc__,
1169"get_count() -> (count0, count1, count2)\n"
1170"\n"
1171"Return the current collection counts\n");
1172
1173static PyObject *
1174gc_get_count(PyObject *self, PyObject *noargs)
1175{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 return Py_BuildValue("(iii)",
1177 generations[0].count,
1178 generations[1].count,
1179 generations[2].count);
Barry Warsawd3c38ff2006-03-07 09:46:03 +00001180}
1181
Neil Schemenauer48c70342001-08-09 15:38:31 +00001182static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001183referrersvisit(PyObject* obj, PyObject *objs)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001185 Py_ssize_t i;
1186 for (i = 0; i < PyTuple_GET_SIZE(objs); i++)
1187 if (PyTuple_GET_ITEM(objs, i) == obj)
1188 return 1;
1189 return 0;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001190}
1191
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001192static int
Martin v. Löwis560da622001-11-24 09:24:51 +00001193gc_referrers_for(PyObject *objs, PyGC_Head *list, PyObject *resultlist)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001194{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001195 PyGC_Head *gc;
1196 PyObject *obj;
1197 traverseproc traverse;
1198 for (gc = list->gc.gc_next; gc != list; gc = gc->gc.gc_next) {
1199 obj = FROM_GC(gc);
1200 traverse = Py_TYPE(obj)->tp_traverse;
1201 if (obj == objs || obj == resultlist)
1202 continue;
1203 if (traverse(obj, (visitproc)referrersvisit, objs)) {
1204 if (PyList_Append(resultlist, obj) < 0)
1205 return 0; /* error */
1206 }
1207 }
1208 return 1; /* no error */
Neil Schemenauer48c70342001-08-09 15:38:31 +00001209}
1210
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001211PyDoc_STRVAR(gc_get_referrers__doc__,
Martin v. Löwis560da622001-11-24 09:24:51 +00001212"get_referrers(*objs) -> list\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001213Return the list of objects that directly refer to any of objs.");
Neil Schemenauer48c70342001-08-09 15:38:31 +00001214
Neil Schemenauer17e7be62001-08-10 14:46:47 +00001215static PyObject *
Martin v. Löwis560da622001-11-24 09:24:51 +00001216gc_get_referrers(PyObject *self, PyObject *args)
Neil Schemenauer48c70342001-08-09 15:38:31 +00001217{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 int i;
1219 PyObject *result = PyList_New(0);
1220 if (!result) return NULL;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 for (i = 0; i < NUM_GENERATIONS; i++) {
1223 if (!(gc_referrers_for(args, GEN_HEAD(i), result))) {
1224 Py_DECREF(result);
1225 return NULL;
1226 }
1227 }
1228 return result;
Neil Schemenauer48c70342001-08-09 15:38:31 +00001229}
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001230
Tim Peters0f81ab62003-04-08 16:39:48 +00001231/* Append obj to list; return true if error (out of memory), false if OK. */
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001232static int
Tim Peters730f5532003-04-08 17:17:17 +00001233referentsvisit(PyObject *obj, PyObject *list)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001234{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 return PyList_Append(list, obj) < 0;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001236}
1237
Tim Peters730f5532003-04-08 17:17:17 +00001238PyDoc_STRVAR(gc_get_referents__doc__,
1239"get_referents(*objs) -> list\n\
Jeremy Hylton059b0942003-04-03 16:29:13 +00001240Return the list of objects that are directly referred to by objs.");
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001241
1242static PyObject *
Tim Peters730f5532003-04-08 17:17:17 +00001243gc_get_referents(PyObject *self, PyObject *args)
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 Py_ssize_t i;
1246 PyObject *result = PyList_New(0);
Tim Peters0f81ab62003-04-08 16:39:48 +00001247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 if (result == NULL)
1249 return NULL;
Tim Peters0f81ab62003-04-08 16:39:48 +00001250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
1252 traverseproc traverse;
1253 PyObject *obj = PyTuple_GET_ITEM(args, i);
Tim Peters0f81ab62003-04-08 16:39:48 +00001254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 if (! PyObject_IS_GC(obj))
1256 continue;
1257 traverse = Py_TYPE(obj)->tp_traverse;
1258 if (! traverse)
1259 continue;
1260 if (traverse(obj, (visitproc)referentsvisit, result)) {
1261 Py_DECREF(result);
1262 return NULL;
1263 }
1264 }
1265 return result;
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001266}
1267
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001268PyDoc_STRVAR(gc_get_objects__doc__,
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001269"get_objects() -> [...]\n"
1270"\n"
1271"Return a list of objects tracked by the collector (excluding the list\n"
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001272"returned).\n");
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001273
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001274static PyObject *
Tim Peters50c61d52003-04-06 01:50:50 +00001275gc_get_objects(PyObject *self, PyObject *noargs)
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 int i;
1278 PyObject* result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 result = PyList_New(0);
1281 if (result == NULL)
1282 return NULL;
1283 for (i = 0; i < NUM_GENERATIONS; i++) {
1284 if (append_objects(result, GEN_HEAD(i))) {
1285 Py_DECREF(result);
1286 return NULL;
1287 }
1288 }
1289 return result;
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001290}
1291
Antoine Pitrou3a652b12009-03-23 18:52:06 +00001292PyDoc_STRVAR(gc_is_tracked__doc__,
1293"is_tracked(obj) -> bool\n"
1294"\n"
1295"Returns true if the object is tracked by the garbage collector.\n"
1296"Simple atomic objects will return false.\n"
1297);
1298
1299static PyObject *
1300gc_is_tracked(PyObject *self, PyObject *obj)
1301{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001302 PyObject *result;
1303
1304 if (PyObject_IS_GC(obj) && IS_TRACKED(obj))
1305 result = Py_True;
1306 else
1307 result = Py_False;
1308 Py_INCREF(result);
1309 return result;
Antoine Pitrou3a652b12009-03-23 18:52:06 +00001310}
1311
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001312
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00001313PyDoc_STRVAR(gc__doc__,
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001314"This module provides access to the garbage collector for reference cycles.\n"
1315"\n"
Vladimir Marangozovf9d20c32000-08-06 22:45:31 +00001316"enable() -- Enable automatic garbage collection.\n"
1317"disable() -- Disable automatic garbage collection.\n"
1318"isenabled() -- Returns true if automatic collection is enabled.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001319"collect() -- Do a full collection right now.\n"
Thomas Wouters89f507f2006-12-13 04:49:30 +00001320"get_count() -- Return the current collection counts.\n"
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001321"set_debug() -- Set debugging flags.\n"
1322"get_debug() -- Get debugging flags.\n"
1323"set_threshold() -- Set the collection thresholds.\n"
1324"get_threshold() -- Return the current the collection thresholds.\n"
Neil Schemenauerc7c8d8e2001-08-09 15:58:59 +00001325"get_objects() -- Return a list of all objects tracked by the collector.\n"
Antoine Pitrou3a652b12009-03-23 18:52:06 +00001326"is_tracked() -- Returns true if a given object is tracked.\n"
Jeremy Hylton5bd378b2003-04-03 16:28:38 +00001327"get_referrers() -- Return the list of objects that refer to an object.\n"
Tim Peters730f5532003-04-08 17:17:17 +00001328"get_referents() -- Return the list of objects that an object refers to.\n");
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001329
1330static PyMethodDef GcMethods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 {"enable", gc_enable, METH_NOARGS, gc_enable__doc__},
1332 {"disable", gc_disable, METH_NOARGS, gc_disable__doc__},
1333 {"isenabled", gc_isenabled, METH_NOARGS, gc_isenabled__doc__},
1334 {"set_debug", gc_set_debug, METH_VARARGS, gc_set_debug__doc__},
1335 {"get_debug", gc_get_debug, METH_NOARGS, gc_get_debug__doc__},
1336 {"get_count", gc_get_count, METH_NOARGS, gc_get_count__doc__},
1337 {"set_threshold", gc_set_thresh, METH_VARARGS, gc_set_thresh__doc__},
1338 {"get_threshold", gc_get_thresh, METH_NOARGS, gc_get_thresh__doc__},
1339 {"collect", (PyCFunction)gc_collect,
1340 METH_VARARGS | METH_KEYWORDS, gc_collect__doc__},
1341 {"get_objects", gc_get_objects,METH_NOARGS, gc_get_objects__doc__},
1342 {"is_tracked", gc_is_tracked, METH_O, gc_is_tracked__doc__},
1343 {"get_referrers", gc_get_referrers, METH_VARARGS,
1344 gc_get_referrers__doc__},
1345 {"get_referents", gc_get_referents, METH_VARARGS,
1346 gc_get_referents__doc__},
1347 {NULL, NULL} /* Sentinel */
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001348};
1349
Martin v. Löwis1a214512008-06-11 05:26:20 +00001350static struct PyModuleDef gcmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 PyModuleDef_HEAD_INIT,
Antoine Pitrou696e0352010-08-08 22:18:46 +00001352 "gc", /* m_name */
1353 gc__doc__, /* m_doc */
1354 -1, /* m_size */
1355 GcMethods, /* m_methods */
1356 NULL, /* m_reload */
1357 NULL, /* m_traverse */
1358 NULL, /* m_clear */
1359 NULL /* m_free */
Martin v. Löwis1a214512008-06-11 05:26:20 +00001360};
1361
Jason Tishler6bc06ec2003-09-04 11:59:50 +00001362PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00001363PyInit_gc(void)
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001364{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001365 PyObject *m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001366
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001367 m = PyModule_Create(&gcmodule);
Martin v. Löwis1a214512008-06-11 05:26:20 +00001368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 if (m == NULL)
1370 return NULL;
Tim Peters11558872003-04-06 23:30:52 +00001371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 if (garbage == NULL) {
1373 garbage = PyList_New(0);
1374 if (garbage == NULL)
1375 return NULL;
1376 }
1377 Py_INCREF(garbage);
1378 if (PyModule_AddObject(m, "garbage", garbage) < 0)
1379 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001380
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +00001381 if (callbacks == NULL) {
1382 callbacks = PyList_New(0);
1383 if (callbacks == NULL)
1384 return NULL;
1385 }
1386 Py_INCREF(callbacks);
1387 if (PyModule_AddObject(m, "callbacks", callbacks) < 0)
1388 return NULL;
1389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 /* Importing can't be done in collect() because collect()
1391 * can be called via PyGC_Collect() in Py_Finalize().
1392 * This wouldn't be a problem, except that <initialized> is
1393 * reset to 0 before calling collect which trips up
1394 * the import and triggers an assertion.
1395 */
1396 if (tmod == NULL) {
1397 tmod = PyImport_ImportModuleNoBlock("time");
1398 if (tmod == NULL)
1399 PyErr_Clear();
1400 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001401
Martin v. Löwis1a214512008-06-11 05:26:20 +00001402#define ADD_INT(NAME) if (PyModule_AddIntConstant(m, #NAME, NAME) < 0) return NULL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001403 ADD_INT(DEBUG_STATS);
1404 ADD_INT(DEBUG_COLLECTABLE);
1405 ADD_INT(DEBUG_UNCOLLECTABLE);
1406 ADD_INT(DEBUG_SAVEALL);
1407 ADD_INT(DEBUG_LEAK);
Tim Peters11558872003-04-06 23:30:52 +00001408#undef ADD_INT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 return m;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +00001410}
1411
Guido van Rossume13ddc92003-04-17 17:29:22 +00001412/* API to invoke gc.collect() from C */
Neal Norwitz7b216c52006-03-04 20:01:53 +00001413Py_ssize_t
Guido van Rossume13ddc92003-04-17 17:29:22 +00001414PyGC_Collect(void)
1415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 Py_ssize_t n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 if (collecting)
1419 n = 0; /* already collecting, don't do anything */
1420 else {
1421 collecting = 1;
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +00001422 n = collect_with_callback(NUM_GENERATIONS - 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 collecting = 0;
1424 }
Guido van Rossume13ddc92003-04-17 17:29:22 +00001425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 return n;
Guido van Rossume13ddc92003-04-17 17:29:22 +00001427}
1428
Antoine Pitrou696e0352010-08-08 22:18:46 +00001429void
1430_PyGC_Fini(void)
1431{
Antoine Pitrou2ed94eb2010-09-14 09:48:39 +00001432 if (!(debug & DEBUG_SAVEALL)
1433 && garbage != NULL && PyList_GET_SIZE(garbage) > 0) {
Georg Brandl08be72d2010-10-24 15:11:22 +00001434 char *message;
1435 if (debug & DEBUG_UNCOLLECTABLE)
Antoine Pitroub5d82042010-11-05 00:05:25 +00001436 message = "gc: %zd uncollectable objects at " \
Georg Brandl08be72d2010-10-24 15:11:22 +00001437 "shutdown";
1438 else
Antoine Pitroub5d82042010-11-05 00:05:25 +00001439 message = "gc: %zd uncollectable objects at " \
Georg Brandl08be72d2010-10-24 15:11:22 +00001440 "shutdown; use gc.set_debug(gc.DEBUG_UNCOLLECTABLE) to list them";
1441 if (PyErr_WarnFormat(PyExc_ResourceWarning, 0, message,
1442 PyList_GET_SIZE(garbage)) < 0)
1443 PyErr_WriteUnraisable(NULL);
Antoine Pitrou696e0352010-08-08 22:18:46 +00001444 if (debug & DEBUG_UNCOLLECTABLE) {
1445 PyObject *repr = NULL, *bytes = NULL;
1446 repr = PyObject_Repr(garbage);
1447 if (!repr || !(bytes = PyUnicode_EncodeFSDefault(repr)))
1448 PyErr_WriteUnraisable(garbage);
1449 else {
1450 PySys_WriteStderr(
1451 " %s\n",
1452 PyBytes_AS_STRING(bytes)
1453 );
1454 }
1455 Py_XDECREF(repr);
1456 Py_XDECREF(bytes);
1457 }
Antoine Pitrou696e0352010-08-08 22:18:46 +00001458 }
Kristján Valur Jónsson69c63522012-04-15 11:41:32 +00001459 Py_CLEAR(callbacks);
Antoine Pitrou696e0352010-08-08 22:18:46 +00001460}
1461
Neil Schemenauer43411b52001-08-30 00:05:51 +00001462/* for debugging */
Guido van Rossume13ddc92003-04-17 17:29:22 +00001463void
1464_PyGC_Dump(PyGC_Head *g)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 _PyObject_Dump(FROM_GC(g));
Neil Schemenauer43411b52001-08-30 00:05:51 +00001467}
1468
Neil Schemenauer43411b52001-08-30 00:05:51 +00001469/* extension modules might be compiled with GC support so these
1470 functions must always be available */
1471
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001472#undef PyObject_GC_Track
1473#undef PyObject_GC_UnTrack
1474#undef PyObject_GC_Del
1475#undef _PyObject_GC_Malloc
1476
Neil Schemenauer43411b52001-08-30 00:05:51 +00001477void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001478PyObject_GC_Track(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 _PyObject_GC_TRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001481}
1482
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001483/* for binary compatibility with 2.2 */
Neil Schemenauer43411b52001-08-30 00:05:51 +00001484void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001485_PyObject_GC_Track(PyObject *op)
1486{
1487 PyObject_GC_Track(op);
1488}
1489
1490void
1491PyObject_GC_UnTrack(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001492{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 /* Obscure: the Py_TRASHCAN mechanism requires that we be able to
1494 * call PyObject_GC_UnTrack twice on an object.
1495 */
1496 if (IS_TRACKED(op))
1497 _PyObject_GC_UNTRACK(op);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001498}
1499
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001500/* for binary compatibility with 2.2 */
1501void
1502_PyObject_GC_UnTrack(PyObject *op)
1503{
1504 PyObject_GC_UnTrack(op);
1505}
1506
Neil Schemenauer43411b52001-08-30 00:05:51 +00001507PyObject *
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001508_PyObject_GC_Malloc(size_t basicsize)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001509{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001510 PyObject *op;
1511 PyGC_Head *g;
1512 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1513 return PyErr_NoMemory();
1514 g = (PyGC_Head *)PyObject_MALLOC(
1515 sizeof(PyGC_Head) + basicsize);
1516 if (g == NULL)
1517 return PyErr_NoMemory();
1518 g->gc.gc_refs = GC_UNTRACKED;
1519 generations[0].count++; /* number of allocated GC objects */
1520 if (generations[0].count > generations[0].threshold &&
1521 enabled &&
1522 generations[0].threshold &&
1523 !collecting &&
1524 !PyErr_Occurred()) {
1525 collecting = 1;
1526 collect_generations();
1527 collecting = 0;
1528 }
1529 op = FROM_GC(g);
1530 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001531}
1532
1533PyObject *
1534_PyObject_GC_New(PyTypeObject *tp)
1535{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 PyObject *op = _PyObject_GC_Malloc(_PyObject_SIZE(tp));
1537 if (op != NULL)
1538 op = PyObject_INIT(op, tp);
1539 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001540}
1541
1542PyVarObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001543_PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001544{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 const size_t size = _PyObject_VAR_SIZE(tp, nitems);
1546 PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
1547 if (op != NULL)
1548 op = PyObject_INIT_VAR(op, tp, nitems);
1549 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001550}
1551
1552PyVarObject *
Martin v. Löwis41290682006-02-16 14:56:14 +00001553_PyObject_GC_Resize(PyVarObject *op, Py_ssize_t nitems)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001554{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 const size_t basicsize = _PyObject_VAR_SIZE(Py_TYPE(op), nitems);
1556 PyGC_Head *g = AS_GC(op);
1557 if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
1558 return (PyVarObject *)PyErr_NoMemory();
1559 g = (PyGC_Head *)PyObject_REALLOC(g, sizeof(PyGC_Head) + basicsize);
1560 if (g == NULL)
1561 return (PyVarObject *)PyErr_NoMemory();
1562 op = (PyVarObject *) FROM_GC(g);
1563 Py_SIZE(op) = nitems;
1564 return op;
Neil Schemenauer43411b52001-08-30 00:05:51 +00001565}
1566
1567void
Neil Schemenauerfec4eb12002-04-12 02:41:03 +00001568PyObject_GC_Del(void *op)
Neil Schemenauer43411b52001-08-30 00:05:51 +00001569{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001570 PyGC_Head *g = AS_GC(op);
1571 if (IS_TRACKED(op))
1572 gc_list_remove(g);
1573 if (generations[0].count > 0) {
1574 generations[0].count--;
1575 }
1576 PyObject_FREE(g);
Neil Schemenauer43411b52001-08-30 00:05:51 +00001577}