Skip to content

Commit f6f02a9

Browse files
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

File tree

Modules/Core/Common/wrapping/test/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ if(ITK_WRAP_PYTHON)
6666
COMMAND
6767
${CMAKE_CURRENT_SOURCE_DIR}/itkImageLifetimeTest.py
6868
)
69+
itk_python_add_test(
70+
NAME itkImageMemoryLeakPythonTest
71+
COMMAND
72+
${CMAKE_CURRENT_SOURCE_DIR}/itkImageMemoryLeakTest.py
73+
)
6974
endif()

0 commit comments

Comments
 (0)