Skip to content
16 changes: 16 additions & 0 deletions include/viennals/lsOxidation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,15 @@ template <class T, int D> class Oxidation {

Oxidation() = default;

~Oxidation() {
// Break the shared_ptr cycle between
// OxidationDeformation::maskVelocityField and
// OxidationMaskBending::deformationField so both reach ref-count 0 when the
// SmartPointer members are destroyed in reverse declaration order.
if (deformationField)
deformationField->clearMaskVelocityField();
}

Oxidation(SmartPointer<Domain<T, D>> passedSiInterface,
SmartPointer<Domain<T, D>> passedAmbientInterface,
SmartPointer<Domain<T, D>> passedMaskInterface = nullptr)
Expand Down Expand Up @@ -381,6 +390,13 @@ template <class T, int D> class Oxidation {
auto stepDeformationParams = deformationParams;
stepDeformationParams.stressTimeStep = stressTimeStep;

// Break the shared_ptr cycle (OxidationDeformation ↔
// OxidationMaskBending) left by the previous solveFields call so the old
// objects are freed when deformationField and maskBendingField are
// replaced below.
if (deformationField)
deformationField->clearMaskVelocityField();

// --- Coupled diffusion + deformation solve ---

diffusionField = OxidationDiffusion<T, D>::New(
Expand Down
2 changes: 1 addition & 1 deletion include/viennals/lsWriteVisualizationMesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ template <class T, int D> class WriteVisualizationMesh {
vtkSmartPointer<vtkCellArray> newCells =
vtkSmartPointer<vtkCellArray>::New();

vtkSmartPointer<vtkIdList> cellPoints = vtkIdList::New();
vtkSmartPointer<vtkIdList> cellPoints = vtkSmartPointer<vtkIdList>::New();
oldCells->InitTraversal();
while (oldCells->GetNextCell(cellPoints)) {
for (vtkIdType pointId = 0; pointId < cellPoints->GetNumberOfIds();
Expand Down
6 changes: 6 additions & 0 deletions tests/MultiSurfaceMesh/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ViennaLS)

add_dependencies(ViennaLS_Tests ${PROJECT_NAME})
add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}>)
if(VIENNALS_ENABLE_SANITIZER)
set_tests_properties(
${PROJECT_NAME}
PROPERTIES ENVIRONMENT
"LSAN_OPTIONS=suppressions=${CMAKE_SOURCE_DIR}/tests/lsan_suppressions.txt")
endif()
6 changes: 6 additions & 0 deletions tests/VisualizationMesh/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,9 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ViennaLS)

add_dependencies(ViennaLS_Tests ${PROJECT_NAME})
add_test(NAME ${PROJECT_NAME} COMMAND $<TARGET_FILE:${PROJECT_NAME}>)
if(VIENNALS_ENABLE_SANITIZER)
set_tests_properties(
${PROJECT_NAME}
PROPERTIES ENVIRONMENT
"LSAN_OPTIONS=suppressions=${CMAKE_SOURCE_DIR}/tests/lsan_suppressions.txt")
endif()
4 changes: 4 additions & 0 deletions tests/lsan_suppressions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# VTK 9.1 internal leak in geometry filter characterization (unfixed upstream)
leak:vtkGeometryFilterHelper::CharacterizeUnstructuredGrid
# OpenMP thread pool initialization — false positive under musl libc
leak:libgomp
Loading