diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-07-28 13:16:30 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-07-28 13:16:30 -0700 |
commit | 851880009020288d71fa6878f3dae9ce2aca4395 (patch) | |
tree | 79c54643f195d7867d8e8387c9a4ffc310c3cef5 | |
parent | 5873b0f43f5ff4d811f951baaacb7bbe8b1a486c (diff) | |
parent | 079123b363e4ec5577f656001e77c1dcf057bbcb (diff) |
Merge pull request #3102 from stripe:andrew/cgroup-eintr
PiperOrigin-RevId: 323638518
-rw-r--r-- | runsc/cgroup/cgroup.go | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/runsc/cgroup/cgroup.go b/runsc/cgroup/cgroup.go index e5cc9d622..8fbc3887a 100644 --- a/runsc/cgroup/cgroup.go +++ b/runsc/cgroup/cgroup.go @@ -92,7 +92,17 @@ func setOptionalValueUint16(path, name string, val *uint16) error { func setValue(path, name, data string) error { fullpath := filepath.Join(path, name) - return ioutil.WriteFile(fullpath, []byte(data), 0700) + + // Retry writes on EINTR; see: + // https://github.com/golang/go/issues/38033 + for { + err := ioutil.WriteFile(fullpath, []byte(data), 0700) + if err == nil { + return nil + } else if !errors.Is(err, syscall.EINTR) { + return err + } + } } func getValue(path, name string) (string, error) { @@ -132,8 +142,16 @@ func fillFromAncestor(path string) (string, error) { if err != nil { return "", err } - if err := ioutil.WriteFile(path, []byte(val), 0700); err != nil { - return "", err + + // Retry writes on EINTR; see: + // https://github.com/golang/go/issues/38033 + for { + err := ioutil.WriteFile(path, []byte(val), 0700) + if err == nil { + break + } else if !errors.Is(err, syscall.EINTR) { + return "", err + } } return val, nil } |