Commit f6f02a9
committed
ENH: Add memory leak tests for itk.Image buffer export paths
Verifies that the NDArrayITKBase reference-holding mechanism does not
introduce memory leaks or prevent garbage collection when all Python
references are released.
itkImageMemoryLeakTest.py (24 assertions):
Section 1 - Weak reference GC verification (13 tests):
- Image GC'd when np.asarray array is deleted [all versions]
- Image GC'd when __buffer__ memoryview is deleted [all versions]
- Image GC'd when array_view_from_image view is deleted [all versions]
- Image GC'd immediately after itk.array_from_image (deep copy) [all]
- Image GC'd immediately after np.array(copy=True) [all versions]
- Image GC'd immediately after __array__(copy=True) [all versions]
- Image GC'd when chained slice chain is fully deleted [all versions]
- Pipeline output image GC'd after exported array deleted [all versions]
Section 2 - Reference count verification (5 tests):
- np.asarray increments image refcount [all versions]
- Second np.asarray adds another reference [all versions]
- Refcount restored after del arrays [all versions]
- __buffer__ increments refcount [all versions]
- Refcount restored after del memoryview [all versions]
Section 3 - RSS memory growth (4 tests):
- 200x create-export-delete cycle via np.asarray: < 20 MB growth
- 200x cycle via __buffer__: < 20 MB growth
- 200x cycle via array_view_from_image: < 20 MB growth
- 200x cycle via array_from_image (deep copy): < 20 MB growth
Section 4 - Circular reference detection (2 tests):
- No uncollectable garbage after np.asarray cycle
- No uncollectable garbage after __buffer__ cycle
Co-Authored-By: Hans J. Johnson <hans-johnson@uiowa.edu>1 parent 418dc0d commit f6f02a9
2 files changed
Lines changed: 424 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
69 | 74 | | |
0 commit comments