mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
merge #4930 into opencontainers/runc:main
Kir Kolyshkin (2): libct: refactor setnsProcess.start libct: close child fds on prepareCgroupFD error LGTMs: lifubang cyphar
This commit is contained in:
@@ -352,21 +352,21 @@ func (p *setnsProcess) prepareCgroupFD() (*os.File, error) {
|
|||||||
return fd, nil
|
return fd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *setnsProcess) start() (retErr error) {
|
// startWithCgroupFD starts a process via clone3 with CLONE_INTO_CGROUP,
|
||||||
defer p.comm.closeParent()
|
// with a fallback if it fails (e.g. not available).
|
||||||
|
func (p *setnsProcess) startWithCgroupFD() error {
|
||||||
|
// Close the child side of the pipes.
|
||||||
|
defer p.comm.closeChild()
|
||||||
|
|
||||||
fd, err := p.prepareCgroupFD()
|
fd, err := p.prepareCgroupFD()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if fd != nil {
|
||||||
// Get the "before" value of oom kill count.
|
defer fd.Close()
|
||||||
oom, _ := p.manager.OOMKillCount()
|
}
|
||||||
|
|
||||||
err = p.startWithCPUAffinity()
|
err = p.startWithCPUAffinity()
|
||||||
if fd != nil {
|
|
||||||
fd.Close()
|
|
||||||
}
|
|
||||||
if err != nil && p.cmd.SysProcAttr.UseCgroupFD {
|
if err != nil && p.cmd.SysProcAttr.UseCgroupFD {
|
||||||
logrus.Debugf("exec with CLONE_INTO_CGROUP failed: %v; retrying without", err)
|
logrus.Debugf("exec with CLONE_INTO_CGROUP failed: %v; retrying without", err)
|
||||||
// SysProcAttr.CgroupFD is never used when UseCgroupFD is unset.
|
// SysProcAttr.CgroupFD is never used when UseCgroupFD is unset.
|
||||||
@@ -374,9 +374,16 @@ func (p *setnsProcess) start() (retErr error) {
|
|||||||
err = p.startWithCPUAffinity()
|
err = p.startWithCPUAffinity()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the child-side of the pipes (controlled by child).
|
return err
|
||||||
p.comm.closeChild()
|
}
|
||||||
if err != nil {
|
|
||||||
|
func (p *setnsProcess) start() (retErr error) {
|
||||||
|
defer p.comm.closeParent()
|
||||||
|
|
||||||
|
// Get the "before" value of oom kill count.
|
||||||
|
oom, _ := p.manager.OOMKillCount()
|
||||||
|
|
||||||
|
if err := p.startWithCgroupFD(); err != nil {
|
||||||
return fmt.Errorf("error starting setns process: %w", err)
|
return fmt.Errorf("error starting setns process: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user