@@ 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 {