mirror of
https://github.com/opencontainers/runc.git
synced 2025-09-27 03:46:19 +08:00
29 lines
510 B
Go
29 lines
510 B
Go
package linux
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
// retryOnEINTR takes a function that returns an error and calls it
|
|
// until the error returned is not EINTR.
|
|
func retryOnEINTR(fn func() error) error {
|
|
for {
|
|
err := fn()
|
|
if !errors.Is(err, unix.EINTR) {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
// retryOnEINTR2 is like retryOnEINTR, but it returns 2 values.
|
|
func retryOnEINTR2[T any](fn func() (T, error)) (T, error) {
|
|
for {
|
|
val, err := fn()
|
|
if !errors.Is(err, unix.EINTR) {
|
|
return val, err
|
|
}
|
|
}
|
|
}
|