From: Haomai Wang Date: Tue, 30 Sep 2014 02:44:13 +0000 (+0800) Subject: AsyncConnection: make send_message directly send message possibly X-Git-Tag: v0.88~37^2~4^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c8dd0f2aa97b537c698143225f66beb86fdd3c98;p=ceph.git AsyncConnection: make send_message directly send message possibly Signed-off-by: Haomai Wang --- diff --git a/src/msg/AsyncConnection.cc b/src/msg/AsyncConnection.cc index 855a2375080c..a9f421b71bad 100644 --- a/src/msg/AsyncConnection.cc +++ b/src/msg/AsyncConnection.cc @@ -1640,13 +1640,23 @@ int AsyncConnection::send_message(Message *m) m->set_priority(async_msgr->get_default_send_priority()); Mutex::Locker l(lock); - out_q[m->get_priority()].push_back(m); - if ((state == STATE_STANDBY || state == STATE_CLOSED) && !policy.server) { - ldout(async_msgr->cct, 10) << __func__ << " state is " << get_state_name(state) - << " policy.server is false" << dendl; - _connect(); - } else if (sd > 0 && !open_write) { - center->dispatch_event_external(write_handler); + if (!is_queued() && state >= STATE_OPEN && state <= STATE_OPEN_TAG_CLOSE) { + ldout(async_msgr->cct, 10) << __func__ << " try send msg " << m << dendl; + int r = _send(m); + if (r < 0) { + ldout(async_msgr->cct, 1) << __func__ << " send msg failed" << dendl; + // we want to handle fault within internal thread + center->dispatch_event_external(write_handler); + } + } else { + out_q[m->get_priority()].push_back(m); + if ((state == STATE_STANDBY || state == STATE_CLOSED) && !policy.server) { + ldout(async_msgr->cct, 10) << __func__ << " state is " << get_state_name(state) + << " policy.server is false" << dendl; + _connect(); + } else if (sd > 0 && !open_write) { + center->dispatch_event_external(write_handler); + } } return 0; }