From b01db991a51fb48226e55736ea94f3d2ddf130d9 Mon Sep 17 00:00:00 2001 From: mknjc Date: Mon, 11 Jan 2021 14:46:21 +0100 Subject: [PATCH] API: copy the data to send into the tcp internal buffer (#1455) Without the flag lwip only holds a reference to the supplied buffers and the reference must be valid until the tcp ack is received. This can't be guaranteed for stack allocated buffers --- esphome/components/api/api_connection.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 1956f3119d..431be5b4dc 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -676,8 +676,10 @@ bool APIConnection::send_buffer(ProtoWriteBuffer buffer, uint32_t message_type) } } - this->client_->add(reinterpret_cast(header.data()), header.size()); - this->client_->add(reinterpret_cast(buffer.get_buffer()->data()), buffer.get_buffer()->size()); + this->client_->add(reinterpret_cast(header.data()), header.size(), + ASYNC_WRITE_FLAG_COPY | ASYNC_WRITE_FLAG_MORE); + this->client_->add(reinterpret_cast(buffer.get_buffer()->data()), buffer.get_buffer()->size(), + ASYNC_WRITE_FLAG_COPY); bool ret = this->client_->send(); return ret; }