]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Fix issue first addressed in 2c5a3d99aa3be5ce114072e84f73a0a6426e63fd.
authorGreg Farnum <gregf@hq.newdream.net>
Wed, 29 Sep 2010 17:39:49 +0000 (10:39 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Wed, 29 Sep 2010 18:32:01 +0000 (11:32 -0700)
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 <henry_c_chang@tcloudcomputing.com>
src/mon/OSDMonitor.cc

index eaf8a2ffb456061e5a786d5defbb38017fa71be2..ca57c96f475fab11213d6f94c779cf695f7d933c 100644 (file)
@@ -426,10 +426,10 @@ bool OSDMonitor::prepare_failure(MOSDFailure *m)
     }
   } else { //remove the report
     multimap<int, pair<int, int> >::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);