From d12ed5516483d50b8f0c28f483e5bf0b3b6564dd Mon Sep 17 00:00:00 2001 From: Kevin Boyd Date: Sat, 20 Mar 2021 14:43:58 -0700 Subject: [PATCH] Clean up leaks in t_inputrec Refs #3984 --- admin/lsan-suppressions.txt | 2 -- src/gromacs/fileio/tpxio.cpp | 4 ++-- src/gromacs/gmxpreprocess/grompp.cpp | 2 ++ src/gromacs/gmxpreprocess/readir.cpp | 3 +-- src/gromacs/gmxpreprocess/readpull.cpp | 2 +- src/gromacs/mdtypes/inputrec.cpp | 18 +++++++++++++++++- src/gromacs/mdtypes/inputrec.h | 2 +- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/admin/lsan-suppressions.txt b/admin/lsan-suppressions.txt index 07cdc82fb9..d48a05c210 100644 --- a/admin/lsan-suppressions.txt +++ b/admin/lsan-suppressions.txt @@ -13,7 +13,6 @@ leak:do_cpte_matrices leak:do_edsam leak:do_inputrec leak:do_single_flood -leak:get_ir leak:get_zone_pulse_cgs leak:gmx::DomainDecompositionBuilder::Impl::build leak:gmx_check @@ -37,7 +36,6 @@ leak:make_exclusions_zone leak:make_fep_list leak:make_pull_groups leak:make_rotation_groups -leak:make_swap_groups leak:make_tables leak:mdoutf_write_to_trajectory_files # Stack trace does not report a function beyond gmx_srenew_impl, so the file is suppressed instead. diff --git a/src/gromacs/fileio/tpxio.cpp b/src/gromacs/fileio/tpxio.cpp index 3d1dbb3c68..ba2c6b9783 100644 --- a/src/gromacs/fileio/tpxio.cpp +++ b/src/gromacs/fileio/tpxio.cpp @@ -447,9 +447,9 @@ static void do_simtempvals(gmx::ISerializer* serializer, t_simtemp* simtemp, int { if (serializer->reading()) { - snew(simtemp->temperatures, n_lambda); + simtemp->temperatures.resize(n_lambda); } - serializer->doRealArray(simtemp->temperatures, n_lambda); + serializer->doRealArray(simtemp->temperatures.data(), n_lambda); } } } diff --git a/src/gromacs/gmxpreprocess/grompp.cpp b/src/gromacs/gmxpreprocess/grompp.cpp index 11a7d0c551..a6d17f12b0 100644 --- a/src/gromacs/gmxpreprocess/grompp.cpp +++ b/src/gromacs/gmxpreprocess/grompp.cpp @@ -2531,6 +2531,8 @@ int gmx_grompp(int argc, char* argv[]) sfree(opts->wall_atomtype[0]); sfree(opts->wall_atomtype[1]); sfree(opts->include); + sfree(opts->couple_moltype); + for (auto& mol : mi) { // Some of the contents of molinfo have been stolen, so diff --git a/src/gromacs/gmxpreprocess/readir.cpp b/src/gromacs/gmxpreprocess/readir.cpp index 6eac6098c8..2c0e08c4fe 100644 --- a/src/gromacs/gmxpreprocess/readir.cpp +++ b/src/gromacs/gmxpreprocess/readir.cpp @@ -1696,8 +1696,7 @@ static void do_fep_params(t_inputrec* ir, gmx::ArrayRef fep_lambda, static void do_simtemp_params(t_inputrec* ir) { - - snew(ir->simtempvals->temperatures, ir->fepvals->n_lambda); + ir->simtempvals->temperatures.resize(ir->fepvals->n_lambda); getSimTemps(ir->fepvals->n_lambda, ir->simtempvals.get(), ir->fepvals->all_lambda[FreeEnergyPerturbationCouplingType::Temperature]); diff --git a/src/gromacs/gmxpreprocess/readpull.cpp b/src/gromacs/gmxpreprocess/readpull.cpp index f89ff7986e..5af3b4b9e6 100644 --- a/src/gromacs/gmxpreprocess/readpull.cpp +++ b/src/gromacs/gmxpreprocess/readpull.cpp @@ -373,7 +373,7 @@ std::vector read_pullparams(std::vector* inp, pull_param pullCoord.eType = getEnum(inp, buf, wi); sprintf(buf, "pull-coord%d-potential-provider", coordNum); setStringEntry(inp, buf, provider, ""); - pullCoord.externalPotentialProvider = gmx_strdup(provider); + pullCoord.externalPotentialProvider = provider; sprintf(buf, "pull-coord%d-geometry", coordNum); pullCoord.eGeom = getEnum(inp, buf, wi); sprintf(buf, "pull-coord%d-groups", coordNum); diff --git a/src/gromacs/mdtypes/inputrec.cpp b/src/gromacs/mdtypes/inputrec.cpp index 0300c4e5d8..de1626255c 100644 --- a/src/gromacs/mdtypes/inputrec.cpp +++ b/src/gromacs/mdtypes/inputrec.cpp @@ -303,6 +303,21 @@ static void done_t_rot(t_rot* rot) sfree(rot); } +static void done_t_swapCoords(t_swapcoords* swapCoords) +{ + if (swapCoords == nullptr) + { + return; + } + for (int i = 0; i < swapCoords->ngrp; i++) + { + sfree(swapCoords->grp[i].ind); + sfree(swapCoords->grp[i].molname); + } + sfree(swapCoords->grp); + sfree(swapCoords); +} + void done_inputrec(t_inputrec* ir) { sfree(ir->opts.nrdf); @@ -320,6 +335,7 @@ void done_inputrec(t_inputrec* ir) sfree(ir->opts.nFreeze); sfree(ir->opts.egp_flags); + done_t_swapCoords(ir->swap); done_t_rot(ir->rot); delete ir->params; } @@ -487,7 +503,7 @@ static void pr_simtempvals(FILE* fp, int indent, const t_simtemp* simtemp, int n PS("simulated-tempering-scaling", enumValueToString(simtemp->eSimTempScale)); PR("sim-temp-low", simtemp->simtemp_low); PR("sim-temp-high", simtemp->simtemp_high); - pr_rvec(fp, indent, "simulated tempering temperatures", simtemp->temperatures, n_lambda, TRUE); + pr_rvec(fp, indent, "simulated tempering temperatures", simtemp->temperatures.data(), n_lambda, TRUE); } static void pr_expandedvals(FILE* fp, int indent, const t_expanded* expand, int n_lambda) diff --git a/src/gromacs/mdtypes/inputrec.h b/src/gromacs/mdtypes/inputrec.h index 5f97a2e4ed..c61e7c3e8a 100644 --- a/src/gromacs/mdtypes/inputrec.h +++ b/src/gromacs/mdtypes/inputrec.h @@ -109,7 +109,7 @@ struct t_simtemp //! The high temperature for simulated tempering real simtemp_high; //! The range of temperatures used for simulated tempering - real* temperatures; + std::vector temperatures; }; struct t_lambda -- 2.22.0