Other thread Messenger's thread lock() connection lock() send_message() connect try connection lock() ms_fast_connect() try lock() DEAD LOCK supplement On Tue, Dec 2, 2014 at 4:27 PM, Haomai Wang <haomaiwang@xxxxxxxxx> wrote: > Hi Gregoy and Sage, > > I'm just writing Messenger's unit tests to ensure that SimpleMessenger > and AsyncMessenger behavior same and expected. > > I think the most unclear thing is the lock rule of fast dispatch. When > introduced fast dispatch, there exists three methods > "ms_fast_connect", "ms_fast_accept", "ms_fast_dispatch" will be called > within Messenger's thread. Because without fast dispatcher all > messages are delivered from queue to queue, fast path will result in > potential dead lock I think. > > "ms_fast_accept" and "ms_fast_connect" are called with > "pipe_lock"(Pipe) or "lock"(AsyncConnection). And > Connection::send_message will called outsider. So it may happen: > > Other thread Messenger's thread > lock() connection lock() > send_message() connect > try connection lock() ms_fast_connect() > > DEAD LOCK > > So I'm not sure whether we have some lock rules whether on caller side > or ms_fast_connect/accept side. For example, ms_fast_connect/accept > can't acquire the same lock with send_message? > > -- > > Best Regards, > > Wheat -- Best Regards, Wheat -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html