pw_rpc: Release acquired buffer on ServerWriter close
This updates the BaseServerWriter to release its payload buffer when it
is closed.
Change-Id: I8808d618bfc1930fc04f869a47a81a53de1d490e
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/23420
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Alexei Frolov <frolv@google.com>
Reviewed-by: Prashanth Swaminathan <prashanthsw@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/base_server_writer.cc b/pw_rpc/base_server_writer.cc
index 8c57ee1..1d9ea4d 100644
--- a/pw_rpc/base_server_writer.cc
+++ b/pw_rpc/base_server_writer.cc
@@ -50,6 +50,12 @@
return;
}
+ // If the ServerWriter implementer or user forgets to release an acquired
+ // buffer before finishing, release it here.
+ if (!response_.empty()) {
+ ReleasePayloadBuffer();
+ }
+
Close();
// Send a control packet indicating that the stream (and RPC) has terminated.
@@ -66,7 +72,11 @@
return {};
}
- response_ = call_.channel().AcquireBuffer();
+ // Only allow having one active buffer at a time.
+ if (response_.empty()) {
+ response_ = call_.channel().AcquireBuffer();
+ }
+
return response_.payload(ResponsePacket());
}