m/n/c/rpc/resolver: correctly close watcher on context cancel

Without this change, a watcher can be stuck forever closing a connection
to a resolver if that resolver has already exited due to its context
being canceled.

Change-Id: I99dc0f04ff840128879721d3e6368c07345564b7
Reviewed-on: https://review.monogon.dev/c/monogon/+/1371
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/rpc/resolver/watcher.go b/metropolis/node/core/rpc/resolver/watcher.go
index 281fc59..3ea714c 100644
--- a/metropolis/node/core/rpc/resolver/watcher.go
+++ b/metropolis/node/core/rpc/resolver/watcher.go
@@ -114,9 +114,12 @@
 }
 
 func (r *clientWatcher) Close() {
-	r.resolver.reqC <- &request{
+	select {
+	case <-r.resolver.ctx.Done():
+	case r.resolver.reqC <- &request{
 		unsub: &requestUnsubscribe{
 			id: r.subscription.id,
 		},
+	}:
 	}
 }