Fixed a deadlock in free_unreachable_objects.

[SVN r17090]
This commit is contained in:
Peter Dimov
2003-01-30 15:06:32 +00:00
parent cd41426fe9
commit ddf1f0fdcc

View File

@ -195,6 +195,9 @@ static void scan_and_free(void * area, size_t size, map2_type const & m2, free_l
void free_unreachable_objects() void free_unreachable_objects()
{ {
free_list_type free;
{
map2_type m2; map2_type m2;
#ifdef BOOST_HAS_THREADS #ifdef BOOST_HAS_THREADS
@ -207,14 +210,13 @@ void free_unreachable_objects()
find_unreachable_objects_impl(m, m2); find_unreachable_objects_impl(m, m2);
free_list_type free;
for(map2_type::iterator j = m2.begin(); j != m2.end(); ++j) for(map2_type::iterator j = m2.begin(); j != m2.end(); ++j)
{ {
map_type::const_iterator i = m.find(j->first); map_type::const_iterator i = m.find(j->first);
BOOST_ASSERT(i != m.end()); BOOST_ASSERT(i != m.end());
scan_and_free(i->second.first, i->second.second, m2, free); scan_and_free(i->second.first, i->second.second, m2, free);
} }
}
std::cout << "... about to free " << free.size() << " objects.\n"; std::cout << "... about to free " << free.size() << " objects.\n";
} }