From 05e89aaebceb0242aaa43c75277e0b2cc05a11a0 Mon Sep 17 00:00:00 2001 From: Ember Sawady Date: Tue, 19 Jul 2022 04:22:38 +0000 Subject: [PATCH] Improve multi error handling --- main.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 0476fc4..571ab96 100644 --- a/main.go +++ b/main.go @@ -103,11 +103,25 @@ func Exec(e Expr, ins []<-chan Datum, out chan Datum) error { }() go func() { // Go's type system is fucking dumb - var inputs []<-chan Datum + var ins []<-chan Datum for _, mid := range mids { - inputs = append(inputs, mid) + ins = append(ins, mid) } - errs <- Exec(e.Multi.Out, inputs, out) + err := Exec(e.Multi.Out, ins, out) + for ch, d := Select(ins); true; ch, d = Select(ins) { + if d != nil && !d.End { + continue + } + for i, c := range ins { + if c == ch { + ins = append(ins[:i], ins[i+1:]...) + } + } + if len(ins) == 0 { + break + } + } + errs <- err }() err := <-errs for range e.Multi.Cmds { -- 2.38.5