From f8c7bfab82e1ed4f98f1066d3f4a8a035eaa8855 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 24 Jul 2011 15:30:33 -0700 Subject: [PATCH] mds: fix stl iterator misuse in create_subtree_map q might be the first element, so we can't blindly --q; ++q. Signed-off-by: Sage Weil --- src/mds/MDCache.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 9beeb1fd0ce5b..ab9fa071d4bf3 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -2240,7 +2240,8 @@ ESubtreeMap *MDCache::create_subtree_map() for (map >::iterator p = le->subtrees.begin(); p != le->subtrees.end(); ++p) { if (le->ambiguous_subtrees.count(p->first)) continue; - for (vector::iterator q = p->second.begin(); q != p->second.end(); ++q) { + vector::iterator q = p->second.begin(); + while (q != p->second.end()) { if (le->subtrees.count(*q) && le->ambiguous_subtrees.count(*q) == 0) { vector& b = le->subtrees[*q]; @@ -2248,8 +2249,16 @@ ESubtreeMap *MDCache::create_subtree_map() for (vector::iterator r = b.begin(); r != b.end(); ++r) p->second.push_back(*r); le->subtrees.erase(*q); - p->second.erase(q--); - } + if (q == p->second.begin()) { + p->second.erase(q); + q = p->second.begin(); + } else { + p->second.erase(q--); + ++q; + } + } else { + ++q; + } } } dout(15) << " subtrees " << le->subtrees << dendl; -- 2.39.5