From: Greg Farnum Date: Wed, 29 Sep 2010 17:39:49 +0000 (-0700) Subject: mon: Fix issue first addressed in 2c5a3d99aa3be5ce114072e84f73a0a6426e63fd. X-Git-Tag: v0.22~88 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=548df8ec131cff5dfa2ae3a5a851216816892e7b;p=ceph.git mon: Fix issue first addressed in 2c5a3d99aa3be5ce114072e84f73a0a6426e63fd. We were properly falling out of the while loop when we reached end(), but not checking for it in the following if-else. Now we do! Reported-by: Henry C Chang --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index eaf8a2ffb4560..ca57c96f475fa 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -426,10 +426,10 @@ bool OSDMonitor::prepare_failure(MOSDFailure *m) } } else { //remove the report multimap >::iterator i = failed_notes.lower_bound(target_osd); - while ((i->first == target_osd) && (i->second.first != reporter) - && i != failed_notes.end()) + while ((i != failed_notes.end()) && (i->first == target_osd) + && (i->second.first != reporter)) ++i; - if (i->second.first != reporter) + if ((i == failed_notes.end()) || (i->second.first != reporter)) dout(0) << "got an OSD not-failed report from osd" << reporter << " that hasn't reported failure! (or in previous epoch?)" << dendl; else failed_notes.erase(i);