| Index: common/sync/parallel/workPool.go
|
| diff --git a/common/sync/parallel/workPool.go b/common/sync/parallel/workPool.go
|
| index b1592b068271eff2168e0954e1d5c28f9d456281..05c01e0a8f41cf64f2796114583354cddfc16341 100644
|
| --- a/common/sync/parallel/workPool.go
|
| +++ b/common/sync/parallel/workPool.go
|
| @@ -17,7 +17,7 @@ import (
|
| // WorkPool blocks until all the generator completes and all workers have
|
| // finished their tasks.
|
| func WorkPool(workers int, gen func(chan<- func() error)) error {
|
| - return errors.MultiErrorFromErrors(Run(workers, gen))
|
| + return multiErrorFromErrors(Run(workers, gen))
|
| }
|
|
|
| // FanOutIn is useful to quickly parallelize a group of tasks.
|
| @@ -34,3 +34,23 @@ func WorkPool(workers int, gen func(chan<- func() error)) error {
|
| func FanOutIn(gen func(chan<- func() error)) error {
|
| return WorkPool(0, gen)
|
| }
|
| +
|
| +// multiErrorFromErrors takes an error-channel, blocks on it, and returns
|
| +// a MultiError for any errors pushed to it over the channel, or nil if
|
| +// all the errors were nil.
|
| +func multiErrorFromErrors(ch <-chan error) error {
|
| + if ch == nil {
|
| + return nil
|
| + }
|
| + ret := errors.MultiError(nil)
|
| + for e := range ch {
|
| + if e == nil {
|
| + continue
|
| + }
|
| + ret = append(ret, e)
|
| + }
|
| + if len(ret) == 0 {
|
| + return nil
|
| + }
|
| + return ret
|
| +}
|
|
|