From 921f8f3b94fbd44b0b3afed144551e39617485ec Mon Sep 17 00:00:00 2001 From: shangfufei Date: Tue, 13 Nov 2018 11:10:28 +0800 Subject: [PATCH] msg/async: Skip the duplicated processing of the same link. Update Event.cc Signed-off-by: shangfufei --- src/msg/async/Event.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index b2a25660b3468..42987eed4d9c6 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -452,12 +452,16 @@ int EventCenter::process_events(unsigned timeout_microseconds, ceph::timespan * void EventCenter::dispatch_event_external(EventCallbackRef e) { - external_lock.lock(); - external_events.push_back(e); - bool wake = !external_num_events.load(); - uint64_t num = ++external_num_events; - external_lock.unlock(); - if (!in_thread() && wake) + uint64_t num = 0; + { + std::lock_guard lock{external_lock}; + if (external_num_events > 0 && *external_events.rbegin() == e) { + return; + } + external_events.push_back(e); + num = ++external_num_events; + } + if (num == 1 && !in_thread()) wakeup(); ldout(cct, 30) << __func__ << " " << e << " pending " << num << dendl; -- 2.39.5