Skip to content

Commit 6494854

Browse files
committed
Fix: Late unique_ptr puts without CLOSE_FILE or ADVANCE operations (openPMD#1744)
* Add failing test * Add failing test * Revert "Add failing test" This reverts commit 5e04ece. * Reactivate writing from unique_ptr in finalize()
1 parent 1e0e630 commit 6494854

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

src/IO/ADIOS/ADIOS2File.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ void ADIOS2File::finalize()
231231
m_ADIOS.RemoveIO(m_IOName);
232232
}
233233
}
234+
m_uniquePtrPuts.clear();
234235
finalized = true;
235236
}
236237

test/SerialIOTest.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,22 @@ TEST_CASE("close_and_copy_attributable_test", "[serial]")
741741
}
742742
}
743743

744+
TEST_CASE("issue_1744_unique_ptrs_at_close_time", "[serial]")
745+
{
746+
#if openPMD_HAVE_ADIOS2
747+
openPMD::Series write(
748+
"../samples/issue_1744_unique_ptrs_at_close_time.bp4",
749+
openPMD::Access::CREATE,
750+
R"({"iteration_encoding": "group_based"})");
751+
std::unique_ptr<int[]> data_unique(new int[10]);
752+
std::iota(data_unique.get(), data_unique.get() + 10, 0);
753+
auto E_x = write.writeIterations()[0].meshes["E"]["x"];
754+
E_x.resetDataset({openPMD::Datatype::INT, {10}});
755+
E_x.storeChunk(std::move(data_unique), {0}, {10});
756+
write.close();
757+
#endif
758+
}
759+
744760
#if openPMD_HAVE_ADIOS2
745761
TEST_CASE("close_iteration_throws_test", "[serial]")
746762
{

0 commit comments

Comments
 (0)