aboutsummaryrefslogtreecommitdiff
path: root/pw_rpc/channel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pw_rpc/channel.cc')
-rw-r--r--pw_rpc/channel.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/pw_rpc/channel.cc b/pw_rpc/channel.cc
index fb5eab2fa..70f426214 100644
--- a/pw_rpc/channel.cc
+++ b/pw_rpc/channel.cc
@@ -29,15 +29,17 @@ std::span<byte> Channel::OutputBuffer::payload(const Packet& packet) const {
Status Channel::Send(OutputBuffer& buffer, const internal::Packet& packet) {
Result encoded = packet.Encode(buffer.buffer_);
- buffer.buffer_ = {};
if (!encoded.ok()) {
- PW_LOG_ERROR("Failed to encode response packet to channel buffer");
- output().SendAndReleaseBuffer(0);
+ PW_LOG_ERROR("Failed to encode RPC response packet to channel %u buffer",
+ static_cast<unsigned>(id()));
+ output().DiscardBuffer(buffer.buffer_);
+ buffer.buffer_ = {};
return Status::Internal();
}
- return output().SendAndReleaseBuffer(encoded.value().size());
+ buffer.buffer_ = {};
+ return output().SendAndReleaseBuffer(encoded.value());
}
} // namespace pw::rpc::internal