From: Sage Weil Date: Sat, 21 Jul 2012 15:24:37 +0000 (-0700) Subject: osd/OpTracker: fix use-after-free X-Git-Tag: v0.50~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b497bdacf5d5732285d280772ab9ce6ae88f59e8;p=ceph.git osd/OpTracker: fix use-after-free And formatting. Signed-off-by: Sage Weil --- diff --git a/src/osd/OpRequest.cc b/src/osd/OpRequest.cc index fe2d604832e3..468983d88d16 100644 --- a/src/osd/OpRequest.cc +++ b/src/osd/OpRequest.cc @@ -20,28 +20,29 @@ static ostream& _prefix(std::ostream* _dout) return *_dout << "--OSD::tracker-- "; } -void OpHistory::insert(utime_t now, OpRequest *op) { +void OpHistory::insert(utime_t now, OpRequest *op) +{ duration.insert(make_pair(op->get_duration(), op)); arrived.insert(make_pair(op->get_arrived(), op)); cleanup(now); } -void OpHistory::cleanup(utime_t now) { +void OpHistory::cleanup(utime_t now) +{ while (arrived.size() && - now - arrived.begin()->first > - (double)(g_conf->osd_op_history_duration)) { - delete arrived.begin()->second; + now - arrived.begin()->first > (double)(g_conf->osd_op_history_duration)) { duration.erase(make_pair( arrived.begin()->second->get_duration(), arrived.begin()->second)); + delete arrived.begin()->second; arrived.erase(arrived.begin()); } while (duration.size() > g_conf->osd_op_history_size) { - delete duration.begin()->second; arrived.erase(make_pair( duration.begin()->second->get_arrived(), duration.begin()->second)); + delete duration.begin()->second; duration.erase(duration.begin()); } }