From: Sage Weil Date: Tue, 23 Apr 2019 18:03:42 +0000 (-0500) Subject: osd: take heartbeat_lock when calling heartbeat() X-Git-Tag: v14.2.2~164^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F28164%2Fhead;p=ceph.git osd: take heartbeat_lock when calling heartbeat() Fixes: http://tracker.ceph.com/issues/39439 Signed-off-by: Sage Weil (cherry picked from commit 7863d7c6c49347db97a6bca36f63fc35741ac0e5) --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index a2e04da8b87..17f8e57f2ff 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5217,6 +5217,7 @@ void OSD::heartbeat_check() void OSD::heartbeat() { + ceph_assert(heartbeat_lock.is_locked_by_me()); dout(30) << "heartbeat" << dendl; // get CPU load avg @@ -5866,7 +5867,10 @@ void OSD::_preboot(epoch_t oldest, epoch_t newest) << oldest << ".." << newest << dendl; // ensure our local fullness awareness is accurate - heartbeat(); + { + std::lock_guard l(heartbeat_lock); + heartbeat(); + } // if our map within recent history, try to add ourselves to the osdmap. if (osdmap->get_epoch() == 0) {