From b288ec368e4bc1b7085e8fea7c8914177ea3aa8b Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Fri, 8 Mar 2019 04:14:06 +0100 Subject: [PATCH] msg/async, v2: use bptr continuation for segment reading. Signed-off-by: Radoslaw Zarzynski --- src/msg/async/ProtocolV2.cc | 18 +++++++++--------- src/msg/async/ProtocolV2.h | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 49189c17004..4f810fd962d 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -59,7 +59,7 @@ void ProtocolV2::run_continuation(CtRef continuation) { #define READ(L, C) read(CONTINUATION(C), L) -#define READB(L, B, C) read(CONTINUATION(C), L, B) +#define READ_RXBUF(B, C) read(CONTINUATION(C), B) #ifdef UNIT_TESTS_BUILT @@ -1096,10 +1096,10 @@ CtPtr ProtocolV2::read_frame_segment() { // description of current segment to read const auto& cur_rx_desc = rx_segments_desc.at(rx_segments_data.size()); - std::unique_ptr rx_buffer; + rx_buffer_t rx_buffer; try { - rx_buffer = ceph::buffer::ptr_node::create(buffer::create_aligned( - get_onwire_size(cur_rx_desc.length), cur_rx_desc.alignment)); + rx_buffer = buffer::create_aligned( + get_onwire_size(cur_rx_desc.length), cur_rx_desc.alignment); } catch (std::bad_alloc&) { // Catching because of potential issues with satisfying alignment. ldout(cct, 20) << __func__ << " can't allocate aligned rx_buffer " @@ -1109,13 +1109,10 @@ CtPtr ProtocolV2::read_frame_segment() { return _fault(); } - rx_segments_data.emplace_back(); - rx_segments_data.back().push_back(std::move(rx_buffer)); - return READB(rx_segments_data.back().length(), rx_segments_data.back().c_str(), - handle_read_frame_segment); + return READ_RXBUF(std::move(rx_buffer), handle_read_frame_segment); } -CtPtr ProtocolV2::handle_read_frame_segment(char *buffer, int r) { +CtPtr ProtocolV2::handle_read_frame_segment(rx_buffer_t &&rx_buffer, int r) { ldout(cct, 20) << __func__ << " r=" << r << dendl; if (r < 0) { @@ -1124,6 +1121,9 @@ CtPtr ProtocolV2::handle_read_frame_segment(char *buffer, int r) { return _fault(); } + rx_segments_data.emplace_back(); + rx_segments_data.back().push_back(std::move(rx_buffer)); + // decrypt incoming data // FIXME: if (auth_meta->is_mode_secure()) { if (session_stream_handlers.rx) { diff --git a/src/msg/async/ProtocolV2.h b/src/msg/async/ProtocolV2.h index 242a2bea355..592cc2b1a8f 100644 --- a/src/msg/async/ProtocolV2.h +++ b/src/msg/async/ProtocolV2.h @@ -154,7 +154,7 @@ private: CONTINUATION_DECL(ProtocolV2, read_frame); CONTINUATION_DECL(ProtocolV2, finish_auth); READ_HANDLER_CONTINUATION_DECL(ProtocolV2, handle_read_frame_preamble_main); - READ_HANDLER_CONTINUATION_DECL(ProtocolV2, handle_read_frame_segment); + READ_BPTR_HANDLER_CONTINUATION_DECL(ProtocolV2, handle_read_frame_segment); READ_HANDLER_CONTINUATION_DECL(ProtocolV2, handle_read_frame_epilogue_main); CONTINUATION_DECL(ProtocolV2, throttle_message); CONTINUATION_DECL(ProtocolV2, throttle_bytes); @@ -164,7 +164,7 @@ private: Ct *finish_auth(); Ct *handle_read_frame_preamble_main(char *buffer, int r); Ct *read_frame_segment(); - Ct *handle_read_frame_segment(char *buffer, int r); + Ct *handle_read_frame_segment(rx_buffer_t &&rx_buffer, int r); Ct *handle_read_frame_epilogue_main(char *buffer, int r); Ct *handle_read_frame_dispatch(); Ct *handle_frame_payload(); -- 2.39.5