From: Haomai Wang Date: Sun, 11 Jan 2015 11:33:51 +0000 (+0800) Subject: AsyncConnection: Don't alloc buffer when reenter "READ_FRONT" state X-Git-Tag: v0.93~247^2~13 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e823af41dfb9e757da70bb5ee4d4d9a985ab440e;p=ceph.git AsyncConnection: Don't alloc buffer when reenter "READ_FRONT" state Signed-off-by: Haomai Wang --- diff --git a/src/msg/async/AsyncConnection.cc b/src/msg/async/AsyncConnection.cc index 659eeca4795c..48c425d48d3d 100644 --- a/src/msg/async/AsyncConnection.cc +++ b/src/msg/async/AsyncConnection.cc @@ -620,8 +620,11 @@ void AsyncConnection::process() // read front int front_len = current_header.front_len; if (front_len) { - bufferptr ptr = buffer::create(front_len); - r = read_until(front_len, ptr.c_str()); + if (!front.length()) { + bufferptr ptr = buffer::create(front_len); + front.push_back(ptr); + } + r = read_until(front_len, front.c_str()); if (r < 0) { ldout(async_msgr->cct, 1) << __func__ << " read message front failed" << dendl; goto fail; @@ -629,7 +632,6 @@ void AsyncConnection::process() break; } - front.push_back(ptr); ldout(async_msgr->cct, 20) << __func__ << " got front " << front.length() << dendl; } state = STATE_OPEN_MESSAGE_READ_MIDDLE; @@ -641,15 +643,17 @@ void AsyncConnection::process() // read middle int middle_len = current_header.middle_len; if (middle_len) { - bufferptr ptr = buffer::create(middle_len); - r = read_until(middle_len, ptr.c_str()); + if (!middle.length()) { + bufferptr ptr = buffer::create(middle_len); + middle.push_back(ptr); + } + r = read_until(middle_len, middle.c_str()); if (r < 0) { ldout(async_msgr->cct, 1) << __func__ << " read message middle failed" << dendl; goto fail; } else if (r > 0) { break; } - middle.push_back(ptr); ldout(async_msgr->cct, 20) << __func__ << " got middle " << middle.length() << dendl; }