From 76becb2c1e1d65e9d88f8f20fea8a34e78b77f2d Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Tue, 10 Mar 2015 00:26:22 +0800 Subject: [PATCH] Event: Let external events ran without lock/unlock Signed-off-by: Haomai Wang --- src/msg/async/Event.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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; } -- 2.47.3