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()
+			}
 		}
 	}
 }