]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crush/CrushWrapper: fix iterator invalidation in cleanup_dead_classes
authorSage Weil <sage@redhat.com>
Sat, 12 Aug 2017 18:45:42 +0000 (14:45 -0400)
committerSage Weil <sage@redhat.com>
Sun, 13 Aug 2017 19:00:44 +0000 (15:00 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 061c21786adc92a304467d1160f26ca09718b03f)

src/crush/CrushWrapper.cc

index ee8c0ac0bc8648c7335e34e125ad6faff338bdb4..e91f24b02675b761918e9b168782b4dd6bd03da8 100644 (file)
@@ -2019,9 +2019,15 @@ bool CrushWrapper::_class_is_dead(int class_id)
 
 void CrushWrapper::cleanup_dead_classes()
 {
-  for (auto &c: class_name) {
-    if (_class_is_dead(c.first))
-      remove_class_name(c.second);
+  auto p = class_name.begin();
+  while (p != class_name.end()) {
+    if (_class_is_dead(p->first)) {
+      string n = p->second;
+      ++p;
+      remove_class_name(n);
+    } else {
+      ++p;
+    }
   }
 }