]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: initialize new_state field when we use it
authorSage Weil <sage@inktank.com>
Wed, 29 May 2013 23:50:04 +0000 (16:50 -0700)
committerSage Weil <sage@inktank.com>
Wed, 29 May 2013 23:50:04 +0000 (16:50 -0700)
If we use operator[] on a new int field its value is undefined; avoid
reading it or using |= et al until we initialize it.

Fixes: #4967
Backport: cuttlefish, bobtail
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: David Zafman <david.zafman@inktank.com>
src/mon/OSDMonitor.cc

index 39e3fe9bbe0fef94c005717bc23a71f57bcf4f85..338b5195af27f9c255f2ba8cabce15622754ab9f 100644 (file)
@@ -926,7 +926,8 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi)
           << dendl;
 
   // already pending failure?
-  if (pending_inc.new_state[target_osd] & CEPH_OSD_UP) {
+  if (pending_inc.new_state.count(target_osd) &&
+      pending_inc.new_state[target_osd] & CEPH_OSD_UP) {
     dout(10) << " already pending failure" << dendl;
     return true;
   }
@@ -3174,6 +3175,8 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
 
   done:
       dout(10) << " creating osd." << i << dendl;
+      if (pending_inc.new_state.count(i) == 0)
+       pending_inc.new_state[i] = 0;
       pending_inc.new_state[i] |= CEPH_OSD_EXISTS | CEPH_OSD_NEW;
       if (!uuid.is_zero())
        pending_inc.new_uuid[i] = uuid;