This is an automated email from the ASF dual-hosted git repository. gsim pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
commit 14ab66747eecc6a1aea80969ec058a686c2961c6 Author: Chuck Rolke <c...@apache.org> AuthorDate: Wed May 19 15:21:26 2021 -0400 DISPATCH-2142: Improvements for tcp buffering * Allow little buffer copy that completely fills big buffer. * Preserve stream_data object while there is still data to be copied from its buffers. Prevents stream_data free that in turn frees message qd_buffers that still need to be copied. --- src/adaptors/tcp_adaptor.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c index 1f8a87c..b003732 100644 --- a/src/adaptors/tcp_adaptor.c +++ b/src/adaptors/tcp_adaptor.c @@ -565,18 +565,22 @@ static bool copy_outgoing_buffs(qdr_tcp_connection_t *conn) } else { //copy small buffers into large one size_t used = conn->outgoing_buff_idx; - while (used < conn->outgoing_buff_count && ((conn->write_buffer.size + conn->outgoing_buffs[used].size) < conn->write_buffer.capacity)) { + while (used < conn->outgoing_buff_count && ((conn->write_buffer.size + conn->outgoing_buffs[used].size) <= conn->write_buffer.capacity)) { memcpy(conn->write_buffer.bytes + conn->write_buffer.size, conn->outgoing_buffs[used].bytes, conn->outgoing_buffs[used].size); conn->write_buffer.size += conn->outgoing_buffs[used].size; qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Copying buffer %i of %i with %i bytes (total=%i)", conn->conn_id, used+1, conn->outgoing_buff_count - conn->outgoing_buff_idx, conn->outgoing_buffs[used].size, conn->write_buffer.size); used++; } - conn->write_buffer.context = (uintptr_t) conn->previous_stream_data; - conn->previous_stream_data = 0; result = used == conn->outgoing_buff_count; + if (result) { + // set context only when stream data has just been consumed + conn->write_buffer.context = (uintptr_t) conn->previous_stream_data; + conn->previous_stream_data = 0; + } + conn->outgoing_buff_idx += used; qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Copied %i buffers, %i remain", conn->conn_id, used, conn->outgoing_buff_count - conn->outgoing_buff_idx); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org