[roll third_party/pigweed] pw_rpc: Handle replacing a call with an acquired ChannelOutput buffer
- When a pending RPC is called again, move its ChannelOutput buffer to
the new call object. Previously, the ChannelOutput buffer was left
active in the original call, which caused crashes.
Moving the ChannelOutput buffer rather than closing it prevents code
working with the original call object in another thread from sending a
stale buffer if the call object is replaced. This is an incomplete
solution, though, and more thought is needed. If the RPC body uses the
OutputBuffer before passing it off to the other thread, that thread
will use a stale buffer reference.
- Rearrange the code that replaces the old call to avoid unlocking and
relocking, which could cause problems if another call arrived while
the lock wasn't held.
- Expand tests to cover replacing a call with a ChannelOutput buffer
acquired.
Original-Bug: 591
Original-Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/76920
https://pigweed.googlesource.com/pigweed/pigweed
third_party/pigweed Rolled-Commits: 4b7b09e44f828a2..a06939d49ff44aa
Roller-URL: https://ci.chromium.org/b/8825754018614058865
Cq-Cl-Tag: roller-builder:pigweed-sample-project-roller
Cq-Cl-Tag: roller-bid:8825754018614058865
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I63ed0e320801c138c1b4acd1b195fc2034359315
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/sample_project/+/77140
Bot-Commit: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
Commit-Queue: Pigweed Integration Roller <pigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com>
diff --git a/third_party/pigweed b/third_party/pigweed
index 4b7b09e..a06939d 160000
--- a/third_party/pigweed
+++ b/third_party/pigweed
@@ -1 +1 @@
-Subproject commit 4b7b09e44f828a2a6b105960835b6439fcfaf829
+Subproject commit a06939d49ff44aa14fd5cb907dfe9d09963262e3