@@ -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