pw_rpc: Properly clean up ServerWriters

- Finish a ServerWriter before moving into it.
- Remove and re-register a ServerWriter when it is moved.
- Finish all ServerWriters when destructing a Server.

Change-Id: I8e2cb7270e1eb2f52c40cb418190a071131c89ca
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/13760
Reviewed-by: Alexei Frolov <frolv@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/base_server_writer.cc b/pw_rpc/base_server_writer.cc
index 1e23fc8..31da1d2 100644
--- a/pw_rpc/base_server_writer.cc
+++ b/pw_rpc/base_server_writer.cc
@@ -26,11 +26,20 @@
 }
 
 BaseServerWriter& BaseServerWriter::operator=(BaseServerWriter&& other) {
+  Finish();
+
+  state_ = other.state_;
+
+  if (other.open()) {
+    other.call_.server().RemoveWriter(other);
+    other.state_ = kClosed;
+
+    other.call_.server().RegisterWriter(*this);
+  }
+
   call_ = std::move(other.call_);
   response_ = std::move(other.response_);
-  state_ = std::move(other.state_);
 
-  other.state_ = kClosed;
   return *this;
 }