Neal Norwitz | edc8f13 | 2006-02-28 19:02:05 +0000 | [diff] [blame] | 1 | This directory contains test cases that are known to leak references. |
| 2 | The idea is that you can import these modules while in the interpreter |
| 3 | and call the leak function repeatedly. This will only be helpful if |
| 4 | the interpreter was built in debug mode. If the total ref count |
Neal Norwitz | cd8ca80 | 2006-02-28 20:40:50 +0000 | [diff] [blame] | 5 | doesn't increase, the bug has been fixed and the file should be removed |
| 6 | from the repository. |
Neal Norwitz | edc8f13 | 2006-02-28 19:02:05 +0000 | [diff] [blame] | 7 | |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 8 | Note: be careful to check for cyclic garbage. Sometimes it may be helpful |
| 9 | to define the leak function like: |
| 10 | |
| 11 | def leak(): |
| 12 | def inner_leak(): |
| 13 | # this is the function that leaks, but also creates cycles |
| 14 | inner_leak() |
| 15 | gc.collect() ; gc.collect() ; gc.collect() |
| 16 | |
Neal Norwitz | edc8f13 | 2006-02-28 19:02:05 +0000 | [diff] [blame] | 17 | Here's an example interpreter session for test_gestalt which still leaks: |
| 18 | |
| 19 | >>> from test.leakers.test_gestalt import leak |
| 20 | [24275 refs] |
| 21 | >>> leak() |
| 22 | [28936 refs] |
| 23 | >>> leak() |
| 24 | [28938 refs] |
| 25 | >>> leak() |
| 26 | [28940 refs] |
| 27 | >>> |
| 28 | |
Thomas Wouters | 49fd7fa | 2006-04-21 10:40:58 +0000 | [diff] [blame] | 29 | Once the leak is fixed, the test case should be moved into an appropriate |
| 30 | test (even if it was originally from the test suite). This ensures the |
| 31 | regression doesn't happen again. And if it does, it should be easier |
| 32 | to track down. |