pw_rpc: improve error handling for SendResponse
- distinguish between encode and send errors
Change-Id: I51cf7aba35b4779d79c72a8020fe7193b5a496ee
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/39666
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/nanopb/nanopb_method.cc b/pw_rpc/nanopb/nanopb_method.cc
index 498eb42..6de176e 100644
--- a/pw_rpc/nanopb/nanopb_method.cc
+++ b/pw_rpc/nanopb/nanopb_method.cc
@@ -73,16 +73,22 @@
response.set_payload(payload_buffer.first(encoded.size()));
response.set_status(status);
- if (channel.Send(response_buffer, response).ok()) {
+ pw::Status send_status = channel.Send(response_buffer, response);
+ if (send_status.ok()) {
return;
}
+ PW_LOG_WARN("Failed to send response packet for channel %u, status %u",
+ unsigned(channel.id()),
+ send_status.code());
+
// Re-acquire the buffer to encode an error packet.
response_buffer = channel.AcquireBuffer();
+ } else {
+ PW_LOG_WARN("Failed to encode response packet for channel %u, status %u",
+ unsigned(channel.id()),
+ encoded.status().code());
}
-
- PW_LOG_WARN("Failed to encode response packet for channel %u",
- unsigned(channel.id()));
channel.Send(response_buffer,
Packet::ServerError(request, Status::Internal()));
}