From: Haomai Wang Date: Mon, 9 Mar 2015 16:26:22 +0000 (+0800) Subject: Event: Let external events ran without lock/unlock X-Git-Tag: v9.0.0~197^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=76becb2c1e1d65e9d88f8f20fea8a34e78b77f2d;p=ceph.git Event: Let external events ran without lock/unlock Signed-off-by: Haomai Wang --- diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index bbb2457fb76..f6680417e56 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -364,17 +364,19 @@ int EventCenter::process_events(int timeout_microseconds) if (trigger_time) numevents += process_time_events(); - { - external_lock.Lock(); - while (!external_events.empty()) { - EventCallbackRef e = external_events.front(); - external_events.pop_front(); - external_lock.Unlock(); + external_lock.Lock(); + if (external_events.empty()) { + external_lock.Unlock(); + } else { + deque cur_process; + cur_process.swap(external_events); + external_lock.Unlock(); + while (!cur_process.empty()) { + EventCallbackRef e = cur_process.front(); + cur_process.pop_front(); if (e) e->do_request(0); - external_lock.Lock(); } - external_lock.Unlock(); } return numevents; }