commit | 3600690988cd075c4e775018bcc9d0f345dd3e86 | [log] [tgz] |
---|---|---|
author | Serge Bazanski <serge@monogon.tech> | Fri Mar 17 00:16:57 2023 +0100 |
committer | Serge Bazanski <serge@monogon.tech> | Mon Mar 20 14:09:21 2023 +0000 |
tree | 3a2c20f519667ae15591aea1245e98697a1d7f58 | |
parent | 0b3aac94581f63b3024b261fa6a9f298d0cca52b [diff] |
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, }, + }: } }