From 8f0cd8e2a817c6bcec0e11e469463812cf451fc1 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Tue, 24 May 2016 15:23:50 +0800 Subject: [PATCH] Event: use multimap instead of map Signed-off-by: Haomai Wang --- src/msg/async/Event.cc | 35 +++++++++++++---------------------- src/msg/async/Event.h | 2 +- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index eb20406774e7d..ff535c7b81965 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -232,7 +232,7 @@ uint64_t EventCenter::create_time_event(uint64_t microseconds, EventCallbackRef clock_type::time_point expire = clock_type::now() + std::chrono::microseconds(microseconds); event.id = id; event.time_cb = ctxt; - time_events[expire].push_back(event); + time_events[expire] = event; if (expire < next_time) wakeup(); @@ -248,14 +248,9 @@ void EventCenter::delete_time_event(uint64_t id) return ; for (auto it = time_events.begin(); it != time_events.end(); ++it) { - for (list::iterator j = it->second.begin(); - j != it->second.end(); ++j) { - if (j->id == id) { - it->second.erase(j); - if (it->second.empty()) - time_events.erase(it); - return ; - } + if (it->second.id == id) { + time_events.erase(it); + return ; } } } @@ -294,19 +289,15 @@ int EventCenter::process_time_events() while (!time_events.empty()) { auto it = time_events.begin(); if (now >= it->first || clock_skewed) { - if (it->second.empty()) { - time_events.erase(it); - } else { - TimeEvent &e = it->second.front(); - EventCallbackRef cb = e.time_cb; - uint64_t id = e.id; - it->second.pop_front(); - ldout(cct, 10) << __func__ << " process time event: id=" << id << dendl; - processed++; - time_lock.Unlock(); - cb->do_request(id); - time_lock.Lock(); - } + TimeEvent &e = it->second; + EventCallbackRef cb = e.time_cb; + uint64_t id = e.id; + time_events.erase(it); + ldout(cct, 10) << __func__ << " process time event: id=" << id << dendl; + processed++; + time_lock.Unlock(); + cb->do_request(id); + time_lock.Lock(); } else { break; } diff --git a/src/msg/async/Event.h b/src/msg/async/Event.h index 4618c156b0d92..14c3ab429cce2 100644 --- a/src/msg/async/Event.h +++ b/src/msg/async/Event.h @@ -109,7 +109,7 @@ class EventCenter { deque external_events; vector file_events; EventDriver *driver; - map > time_events; + multimap time_events; uint64_t time_event_next_id; clock_type::time_point last_time; // last time process time event clock_type::time_point next_time; // next wake up time -- 2.39.5