]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Event: external_event lock may stuck in dead lock
authorHaomai Wang <haomaiwang@gmail.com>
Fri, 19 Sep 2014 04:29:08 +0000 (12:29 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Wed, 8 Oct 2014 06:04:58 +0000 (14:04 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/msg/AsyncMessenger.cc
src/msg/Event.cc

index 4005f76220e52a56bc315efedc0cf99dcebee9d4..f5c5ddfeb609873cce37c4ac73ecbd088d866662 100644 (file)
@@ -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++;
index 3f3cfdc2b3f84939eb5877a367b3c9fbc8cc5e94..30c2c87392b592707c73126875dfa35b0c7a4068 100644 (file)
@@ -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;
 }