From a4c794c9fa3141ad09273fff34b6ac8e0f5dd76a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 1 Oct 2025 20:34:51 +0200 Subject: [PATCH] tweak, compiler optimizes it away anyways though --- esphome/components/api/api_frame_helper.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/esphome/components/api/api_frame_helper.cpp b/esphome/components/api/api_frame_helper.cpp index 08ed375a0d..f0a6d92d8b 100644 --- a/esphome/components/api/api_frame_helper.cpp +++ b/esphome/components/api/api_frame_helper.cpp @@ -109,9 +109,11 @@ void APIFrameHelper::buffer_data_from_iov_(const struct iovec *iov, int iovcnt, return; } - auto buffer = std::make_unique(); - buffer->size = total_write_len - offset; - buffer->data = std::make_unique(buffer->size); + uint16_t buffer_size = total_write_len - offset; + auto &buffer = this->tx_buf_[this->tx_buf_tail_]; + buffer = std::make_unique(); + buffer->size = buffer_size; + buffer->data = std::make_unique(buffer_size); uint16_t to_skip = offset; uint16_t write_pos = 0; @@ -130,8 +132,7 @@ void APIFrameHelper::buffer_data_from_iov_(const struct iovec *iov, int iovcnt, } } - // Add to circular buffer - this->tx_buf_[this->tx_buf_tail_] = std::move(buffer); + // Update circular buffer tracking this->tx_buf_tail_ = (this->tx_buf_tail_ + 1) % API_MAX_SEND_QUEUE; this->tx_buf_count_++; }