diff --git a/multierr/funcs.go b/multierr/funcs.go index b10dda9..a67bab7 100644 --- a/multierr/funcs.go +++ b/multierr/funcs.go @@ -69,6 +69,9 @@ func (e *MultiError) Error() (errStr string) { numErrs = len(e.Errors) } + e.lock.Lock() + defer e.lock.Unlock() + for idx, err := range e.Errors { if (idx + 1) < numErrs { errStr += fmt.Sprintf("%v%v", err.Error(), e.ErrorSep) @@ -87,6 +90,9 @@ func (e *MultiError) AddError(err error) { return } + e.lock.Lock() + defer e.lock.Unlock() + e.Errors = append(e.Errors, err) } diff --git a/multierr/types.go b/multierr/types.go index 4cf8259..6e2eb5c 100644 --- a/multierr/types.go +++ b/multierr/types.go @@ -1,9 +1,14 @@ package multierr +import ( + `sync` +) + // MultiError is a type of error.Error that can contain multiple errors. type MultiError struct { // Errors is a slice of errors to combine/concatenate when .Error() is called. Errors []error `json:"errors"` // ErrorSep is a string to use to separate errors for .Error(). The default is "\n". ErrorSep string `json:"separator"` + lock sync.Mutex }