From cc45a8b9f4b4cdedeab968223d18e44a8a0be8ca Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Sat, 27 May 2017 10:44:34 +0800 Subject: [PATCH] msg/async: keep _has_next_outgoing calling under write_lock Signed-off-by: Haomai Wang --- src/msg/async/AsyncConnection.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/msg/async/AsyncConnection.cc b/src/msg/async/AsyncConnection.cc index 7cc6fe97154..1f6ffcea88a 100644 --- a/src/msg/async/AsyncConnection.cc +++ b/src/msg/async/AsyncConnection.cc @@ -2433,6 +2433,7 @@ void AsyncConnection::handle_write() } auto start = ceph::mono_clock::now(); + bool more; do { bufferlist data; Message *m = _get_next_outgoing(&data); @@ -2444,13 +2445,14 @@ void AsyncConnection::handle_write() sent.push_back(m); m->get(); } + more = _has_next_outgoing(); write_lock.unlock(); // send_message or requeue messages may not encode message if (!data.length()) prepare_send_message(get_features(), m, data); - r = write_message(m, data, _has_next_outgoing()); + r = write_message(m, data, more); if (r < 0) { ldout(async_msgr->cct, 1) << __func__ << " send msg failed" << dendl; goto fail; -- 2.39.5