summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-29 16:50:04 -0700
committerSage Weil <sage@inktank.com>2013-05-29 16:50:45 -0700
commit85ad65e294f2b3d4bd1cfef6ae613e31d1cea635 (patch)
tree408105264699b83145069f049dc1d560291d5752
parent65236a4a2541799a0d946df7f3048d4404678f64 (diff)
downloadceph-85ad65e294f2b3d4bd1cfef6ae613e31d1cea635.tar.gz
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 <sage@inktank.com> Reviewed-by: David Zafman <david.zafman@inktank.com> (cherry picked from commit 50ac8917f175d1b107c18ecb025af1a7b103d634)
-rw-r--r--src/mon/OSDMonitor.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc
index 032abc6e4b4..9582609fdec 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;
}
@@ -3164,6 +3165,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;