[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/8825754017344329249
Cq-Cl-Tag: roller-builder:pigweed-experimental-roller
Cq-Cl-Tag: roller-bid:8825754017344329249
CQ-Do-Not-Cancel-Tryjobs: true
Change-Id: I5ae3bbc195db2b0ccd015f667589eb76e71a2a89
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/77160
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>
1 file changed
tree: 8f2b3dcb35a4df0d79c0fc6144c480f0d61185c7
  1. applications/
  2. build_overrides/
  3. pw_board_led/
  4. pw_board_led_arduino/
  5. pw_board_led_host/
  6. pw_board_led_stm32cube/
  7. pw_board_led_stm32f429i_disc1/
  8. pw_spin_delay/
  9. pw_spin_delay_arduino/
  10. pw_spin_delay_host/
  11. pw_spin_delay_stm32cube/
  12. pw_spin_delay_stm32f429i_disc1/
  13. targets/
  14. third_party/
  15. tools/
  16. .gitattributes
  17. .gitignore
  18. .gitmodules
  19. .gn
  20. activate.bat
  21. banner.txt
  22. bootstrap.bat
  23. bootstrap.sh
  24. BUILD.gn
  25. BUILDCONFIG.gn
  26. env_setup.json
  27. navbar.md
  28. OWNERS
  29. PW_PLUGINS
  30. README.md
README.md

Pigweed Experimental

This repository contains experimental pigweed modules.

Repository setup

Clone this repo with --recursive to get all required submodules.

git clone --recursive https://pigweed.googlesource.com/pigweed/experimental

This will pull the Pigweed source repository into third_party/pigweed. If you already cloned but forgot to --recursive run git submodule update --init to pull all submodules.