m/pkg/event: fix potential stuckness in Pipe
If we want to restart a Pipe runnable, we cancel its' context. However,
if the pipe function is currently stuck sending to a channel (perhaps
because a sister runnable also got canceled and isn't reading from it),
we will never exit.
To fix this, ensure that we don't block on this send.
Change-Id: Ic525ebec83748f6a6c4b4fb731617ccb7f95f807
Reviewed-on: https://review.monogon.dev/c/monogon/+/2901
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/pkg/event/event.go b/metropolis/pkg/event/event.go
index cb8b9b5..e38c427 100644
--- a/metropolis/pkg/event/event.go
+++ b/metropolis/pkg/event/event.go
@@ -227,7 +227,11 @@
if err != nil {
return err
}
- c <- v
+ select {
+ case c <- v:
+ case <-ctx.Done():
+ return ctx.Err()
+ }
}
}
}