From 90b45594fe9169133634edce19301273bbd72320 Mon Sep 17 00:00:00 2001 From: Stefan Bienert <stefan.bienert@unibas.ch> Date: Tue, 17 May 2011 15:59:12 +0200 Subject: [PATCH] Fixed BZDNG-246; modified AtomImpl::DeleteAllTorsions() and test_view/ test_delete which produced a memeory leak. --- modules/mol/base/src/impl/atom_impl.cc | 19 ++++++++++--------- modules/mol/base/tests/test_delete.cc | 2 +- modules/mol/base/tests/test_view.cc | 6 +++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/modules/mol/base/src/impl/atom_impl.cc b/modules/mol/base/src/impl/atom_impl.cc index 3339ead62..bf66239bb 100644 --- a/modules/mol/base/src/impl/atom_impl.cc +++ b/modules/mol/base/src/impl/atom_impl.cc @@ -356,20 +356,21 @@ String AtomImpl::GetStringProperty(Prop::ID prop_id) const void AtomImpl::DeleteAllTorsions() { EntityImplPtr e=this->GetEntity(); TorsionImplMap::iterator i; - while (true) { - for (i=e->GetTorsionMap().begin(); i!=e->GetTorsionMap().end(); ++i) { - if (i->second->IsAtomInvolved(shared_from_this())) { - e->GetTorsionMap().erase(i); - continue; - } - } - break; + std::vector<TorsionImplMap::iterator> t_rm_vec; + for (i=e->GetTorsionMap().begin(); i!=e->GetTorsionMap().end(); ++i) { + if (i->second->IsAtomInvolved(shared_from_this())) { + t_rm_vec.push_back(i); + } + } + std::vector<TorsionImplMap::iterator>::iterator it_rm; + for (it_rm=t_rm_vec.begin(); it_rm!=t_rm_vec.end(); ++it_rm) { + e->GetTorsionMap().erase(*it_rm); } TorsionImplList& l=this->GetResidue()->GetTorsionList(); TorsionImplList::iterator j; j=std::remove_if(l.begin(), l.end(), bind(&TorsionImpl::IsAtomInvolved, _1, shared_from_this())); - l.erase(j, l.end()); + l.erase(j, l.end()); } }}} // ns diff --git a/modules/mol/base/tests/test_delete.cc b/modules/mol/base/tests/test_delete.cc index 4a361afc9..ccbce7045 100644 --- a/modules/mol/base/tests/test_delete.cc +++ b/modules/mol/base/tests/test_delete.cc @@ -77,4 +77,4 @@ BOOST_AUTO_TEST_CASE(atom_delete) BOOST_CHECK_NO_THROW(f.e.Apply(ev)); } -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file +BOOST_AUTO_TEST_SUITE_END() diff --git a/modules/mol/base/tests/test_view.cc b/modules/mol/base/tests/test_view.cc index ebfdf10bb..cfe3a395c 100644 --- a/modules/mol/base/tests/test_view.cc +++ b/modules/mol/base/tests/test_view.cc @@ -27,8 +27,8 @@ using namespace ost; using namespace ost::mol; -struct Fixture { - Fixture() { +struct FixtureView { + FixtureView() { e=CreateEntity(); XCSEditor editor=e.EditXCS(); c=editor.InsertChain("A"); @@ -54,7 +54,7 @@ BOOST_AUTO_TEST_SUITE( mol_base ) BOOST_AUTO_TEST_CASE(gen_full_view) { - Fixture f; + FixtureView f; EntityView ev = f.e.CreateFullView(); BOOST_CHECK_EQUAL(ev.GetChainCount(),f.e.GetChainCount()); -- GitLab