Skip to content

Commit 5bb2b09

Browse files
committed
Use non-owning pointer to avoid double free
1 parent c9eab0d commit 5bb2b09

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

Util/reeber/src/reeber.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ void prepare_master_reader(
159159
int finest_level,
160160
const Vector<IntVect>& level_refinements,
161161
const amrex::Geometry geom_in,
162-
std::vector<std::unique_ptr<Real[]>>& pointers_to_copied_data)
162+
std::vector<Real*>& pointers_to_copied_data)
163163
{
164164
std::vector<std::string> new_state_vars { "density", "xmom", "ymom", "zmom" };
165165
const size_t density_var_idx = 0;
@@ -227,7 +227,10 @@ void prepare_master_reader(
227227
gid_to_fab_size[gid] = core_fab_size;
228228

229229
pointers_to_copied_data.emplace_back(new Real[core_fab_size]);
230-
Real* core_fab_ptr = pointers_to_copied_data.back().get();
230+
// Real* core_fab_ptr = pointers_to_copied_data.back().get();
231+
232+
// HACK: use raw pointer to avoid double free
233+
Real* core_fab_ptr = pointers_to_copied_data.back();
231234

232235
GridRef core_grid_ref(core_fab_ptr, core_shape, false);
233236

@@ -266,7 +269,10 @@ void prepare_master_reader(
266269

267270
// reserve memory for dm_density
268271
pointers_to_copied_data.emplace_back(new Real[core_fab_size]);
269-
Real* extra_ptr_copy = pointers_to_copied_data.back().get();
272+
// Real* extra_ptr_copy = pointers_to_copied_data.back().get();
273+
274+
// HACK: use raw pointer to avoid double free
275+
Real* extra_ptr_copy = pointers_to_copied_data.back();
270276
extra_pointers.push_back(extra_ptr_copy);
271277

272278
// reserve memory for variables in new_state
@@ -571,7 +577,8 @@ void Nyx::runReeberAnalysis(Vector<MultiFab*>& new_state,
571577

572578
// store pointers to all dynamically allocated arrays, so that
573579
// data will be freed automatically after exiting compute_halos
574-
std::vector<std::unique_ptr<Real[]>> pointers_to_copied_data;
580+
// std::vector<std::unique_ptr<Real[]>> pointers_to_copied_data;
581+
std::vector<Real*> pointers_to_copied_data; // HACK: avoid double free
575582

576583
diy::mpi::communicator world = ParallelDescriptor::Communicator();
577584

0 commit comments

Comments
 (0)