summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dwflpp.cxx24
-rw-r--r--tapsets.cxx3
-rw-r--r--util.h12
3 files changed, 18 insertions, 21 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index d96f3eda..36b016c7 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -98,25 +98,11 @@ dwflpp::~dwflpp()
{
free(cached_scopes);
- for (module_cu_cache_t::iterator it = module_cu_cache.begin();
- it != module_cu_cache.end(); ++it)
- delete it->second;
-
- for (mod_cu_function_cache_t::iterator it = cu_function_cache.begin();
- it != cu_function_cache.end(); ++it)
- delete it->second;
-
- for (cu_inl_function_cache_t::iterator it = cu_inl_function_cache.begin();
- it != cu_inl_function_cache.end(); ++it)
- delete it->second;
-
- for (mod_cu_type_cache_t::iterator it = global_alias_cache.begin();
- it != global_alias_cache.end(); ++it)
- delete it->second;
-
- for (mod_cu_die_parent_cache_t::iterator it = cu_die_parent_cache.begin();
- it != cu_die_parent_cache.end(); ++it)
- delete it->second;
+ delete_map(module_cu_cache);
+ delete_map(cu_function_cache);
+ delete_map(cu_inl_function_cache);
+ delete_map(global_alias_cache);
+ delete_map(cu_die_parent_cache);
if (dwfl)
dwfl_end(dwfl);
diff --git a/tapsets.cxx b/tapsets.cxx
index 346fa7f3..fc8cb88b 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -3820,8 +3820,7 @@ dwarf_builder::build(systemtap_session & sess,
symbol_table::~symbol_table()
{
- for (iterator_t i = map_by_addr.begin(); i != map_by_addr.end(); ++i)
- delete i->second;
+ delete_map(map_by_addr);
}
void
diff --git a/util.h b/util.h
index b38d01fd..24845545 100644
--- a/util.h
+++ b/util.h
@@ -97,4 +97,16 @@ lex_cast_qstring(std::string const & in)
return out;
}
+
+// Delete all values from a map-like container and clear it
+// (The template is permissive -- be good!)
+template <typename T>
+void delete_map(T& t)
+{
+ for (typename T::iterator i = t.begin(); i != t.end(); ++i)
+ delete i->second;
+ t.clear();
+}
+
+
/* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */