From: shangfufei Date: Tue, 13 Nov 2018 03:10:28 +0000 (+0800) Subject: msg/async: Skip the duplicated processing of the same link. X-Git-Tag: v14.1.0~770^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=921f8f3b94fbd44b0b3afed144551e39617485ec;p=ceph.git msg/async: Skip the duplicated processing of the same link. Update Event.cc Signed-off-by: shangfufei --- diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index b2a25660b34..42987eed4d9 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;