From: Sage Weil Date: Wed, 29 May 2013 23:50:04 +0000 (-0700) Subject: osd: initialize new_state field when we use it X-Git-Tag: v0.64~37 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=50ac8917f175d1b107c18ecb025af1a7b103d634;p=ceph.git osd: initialize new_state field when we use it 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 Reviewed-by: David Zafman --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 39e3fe9bbe0f..338b5195af27 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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;