From: Haomai Wang Date: Fri, 19 Sep 2014 04:29:08 +0000 (+0800) Subject: Event: external_event lock may stuck in dead lock X-Git-Tag: v0.88~37^2~4^2~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=27f7cc09d7a16c662cda4dd78819908c75064893;p=ceph.git Event: external_event lock may stuck in dead lock Signed-off-by: Haomai Wang --- diff --git a/src/msg/AsyncMessenger.cc b/src/msg/AsyncMessenger.cc index 4005f76220e..f5c5ddfeb60 100644 --- a/src/msg/AsyncMessenger.cc +++ b/src/msg/AsyncMessenger.cc @@ -468,7 +468,6 @@ AsyncConnectionRef AsyncMessenger::create_connect(const entity_addr_t& addr, int Worker *w = workers[conn_id % workers.size()]; AsyncConnectionRef conn = new AsyncConnection(cct, this, &w->center); conn->connect(addr, type); - w->center.dispatch_event_external(EventCallbackRef(new C_handle_connect(conn, addr, type))); assert(!conns.count(addr)); conns[addr] = conn; conn_id++; diff --git a/src/msg/Event.cc b/src/msg/Event.cc index 3f3cfdc2b3f..30c2c87392b 100644 --- a/src/msg/Event.cc +++ b/src/msg/Event.cc @@ -298,12 +298,15 @@ int EventCenter::process_events(int timeout_millionseconds) numevents += process_time_events(); { - Mutex::Locker l(lock); + lock.Lock(); while (!external_events.empty()) { EventCallbackRef e = external_events.front(); external_events.pop_front(); + lock.Unlock(); e->do_request(0); + lock.Lock(); } + lock.Unlock(); } return numevents; }