| 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. |