From eebc6c2b8208c7c11b2e8d4990ba8f61332c1cf4 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Tue, 8 Mar 2016 14:35:17 +0800 Subject: [PATCH] Event: replace Mutex with c++ mutex Signed-off-by: Haomai Wang --- src/msg/async/Event.cc | 28 ++++++++++++++-------------- src/msg/async/Event.h | 8 +++----- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index df96343451f83..0a6afb4654cf6 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -117,7 +117,7 @@ int EventCenter::init(int n) EventCenter::~EventCenter() { { - Mutex::Locker l(external_lock); + std::lock_guard l(external_lock); while (!external_events.empty()) { EventCallbackRef e = external_events.front(); if (e) @@ -147,7 +147,7 @@ void EventCenter::set_owner() int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt) { int r = 0; - Mutex::Locker l(file_lock); + std::lock_guard l(file_lock); if (fd >= nevent) { int new_size = nevent << 2; while (fd > new_size) @@ -192,7 +192,7 @@ int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt) void EventCenter::delete_file_event(int fd, int mask) { assert(fd >= 0); - Mutex::Locker l(file_lock); + std::lock_guard l(file_lock); if (fd >= nevent) { ldout(cct, 1) << __func__ << " delete event fd=" << fd << " is equal or greater than nevent=" << nevent << "mask=" << mask << dendl; @@ -329,7 +329,7 @@ int EventCenter::process_events(int timeout_microseconds) ldout(cct, 10) << __func__ << " wait second " << tv.tv_sec << " usec " << tv.tv_usec << dendl; vector fired_events; numevents = driver->event_wait(fired_events, &tv); - file_lock.Lock(); + file_lock.lock(); for (int j = 0; j < numevents; j++) { int rfired = 0; FileEvent *event; @@ -344,36 +344,36 @@ int EventCenter::process_events(int timeout_microseconds) if (event->mask & fired_events[j].mask & EVENT_READABLE) { rfired = 1; cb = event->read_cb; - file_lock.Unlock(); + file_lock.unlock(); cb->do_request(fired_events[j].fd); - file_lock.Lock(); + file_lock.lock(); } if (event->mask & fired_events[j].mask & EVENT_WRITABLE) { if (!rfired || event->read_cb != event->write_cb) { cb = event->write_cb; - file_lock.Unlock(); + file_lock.unlock(); cb->do_request(fired_events[j].fd); - file_lock.Lock(); + file_lock.lock(); } } ldout(cct, 20) << __func__ << " event_wq process is " << fired_events[j].fd << " mask is " << fired_events[j].mask << dendl; } - file_lock.Unlock(); + file_lock.unlock(); if (trigger_time) numevents += process_time_events(); if (external_num_events.load()) { - external_lock.Lock(); + external_lock.lock(); if (external_events.empty()) { - external_lock.Unlock(); + external_lock.unlock(); } else { deque cur_process; cur_process.swap(external_events); external_num_events.store(0); - external_lock.Unlock(); + external_lock.unlock(); while (!cur_process.empty()) { EventCallbackRef e = cur_process.front(); if (e) @@ -388,10 +388,10 @@ int EventCenter::process_events(int timeout_microseconds) void EventCenter::dispatch_event_external(EventCallbackRef e) { - external_lock.Lock(); + external_lock.lock(); external_events.push_back(e); uint64_t num = ++external_num_events; - external_lock.Unlock(); + external_lock.unlock(); if (!in_thread()) wakeup(); diff --git a/src/msg/async/Event.h b/src/msg/async/Event.h index 356c74ef85121..344f322e18e4f 100644 --- a/src/msg/async/Event.h +++ b/src/msg/async/Event.h @@ -41,10 +41,10 @@ #include #include -#include "include/Context.h" +#include "include/utime.h" #include "include/unordered_map.h" #include "common/ceph_time.h" -#include "common/WorkQueue.h" +#include "common/dout.h" #include "net_handler.h" #define EVENT_NONE 0 @@ -110,7 +110,7 @@ class EventCenter { CephContext *cct; int nevent; // Used only to external event - Mutex external_lock, file_lock; + std::mutex external_lock, file_lock;; std::atomic_ulong external_num_events; deque external_events; vector file_events; @@ -134,8 +134,6 @@ class EventCenter { explicit EventCenter(CephContext *c): cct(c), nevent(0), - external_lock("AsyncMessenger::external_lock"), - file_lock("AsyncMessenger::file_lock"), external_num_events(0), driver(NULL), time_event_next_id(1), notify_receive_fd(-1), notify_send_fd(-1), net(c), -- 2.39.5