pw_rpc: Re-acquire response buffer if Channel::Send() fails

A Channel::OutputBuffer object is no longer valid after Channel::Send()
is called. This updates method implementations to obtain a new buffer
before sending an error packet following a failure.

Change-Id: I151b0eff382a98cc0c5f365b69bc357b7672ba60
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/30540
Commit-Queue: Alexei Frolov <frolv@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/nanopb/nanopb_method.cc b/pw_rpc/nanopb/nanopb_method.cc
index bc96dc9..498eb42 100644
--- a/pw_rpc/nanopb/nanopb_method.cc
+++ b/pw_rpc/nanopb/nanopb_method.cc
@@ -76,6 +76,9 @@
     if (channel.Send(response_buffer, response).ok()) {
       return;
     }
+
+    // Re-acquire the buffer to encode an error packet.
+    response_buffer = channel.AcquireBuffer();
   }
 
   PW_LOG_WARN("Failed to encode response packet for channel %u",
diff --git a/pw_rpc/raw/raw_method.cc b/pw_rpc/raw/raw_method.cc
index 4386aba..7fe7f80 100644
--- a/pw_rpc/raw/raw_method.cc
+++ b/pw_rpc/raw/raw_method.cc
@@ -64,8 +64,7 @@
 
   PW_LOG_WARN("Failed to send response packet for channel %u",
               unsigned(call.channel().id()));
-  call.channel().Send(response_buffer,
-                      Packet::ServerError(request, Status::Internal()));
+  call.channel().Send(Packet::ServerError(request, Status::Internal()));
 }
 
 void RawMethod::CallServerStreaming(ServerCall& call,