| This directory contains test cases that are known to leak references. |
| The idea is that you can import these modules while in the interpreter |
| and call the leak function repeatedly. This will only be helpful if |
| the interpreter was built in debug mode. If the total ref count |
| doesn't increase, the bug has been fixed and the file should be removed |
| from the repository. |
| |
| Note: be careful to check for cyclic garbage. Sometimes it may be helpful |
| to define the leak function like: |
| |
| def leak(): |
| def inner_leak(): |
| # this is the function that leaks, but also creates cycles |
| inner_leak() |
| gc.collect() ; gc.collect() ; gc.collect() |
| |
| Here's an example interpreter session for test_gestalt which still leaks: |
| |
| >>> from test.leakers.test_gestalt import leak |
| [24275 refs] |
| >>> leak() |
| [28936 refs] |
| >>> leak() |
| [28938 refs] |
| >>> leak() |
| [28940 refs] |
| >>> |
| |
| Once the leak is fixed, the test case should be moved into an appropriate |
| test (even if it was originally from the test suite). This ensures the |
| regression doesn't happen again. And if it does, it should be easier |
| to track down. |