runsc/cgroup: don't no-op cgroupSystemd.Join() if unit exists

Note that although dbus.Conn.AttachProcessesToUnit() was added in v22.6.0
(2025: https://pkg.go.dev/github.com/coreos/go-systemd/v22/dbus?tab=versions),
the underlying systemd call was added in v238 (2018:
https://lists.freedesktop.org/archives/systemd-devel/2018-March/040469.html).

PiperOrigin-RevId: 827720583
This commit is contained in:
Jamie Liu
2025-11-03 17:59:11 -08:00
committed by gVisor bot
parent ae1233608d
commit e4c5140912
3 changed files with 6 additions and 1 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ require (
github.com/containerd/go-runc v1.0.0
github.com/containerd/log v0.1.0
github.com/containerd/typeurl v1.0.2
github.com/coreos/go-systemd/v22 v22.5.0
github.com/coreos/go-systemd/v22 v22.6.0
github.com/godbus/dbus/v5 v5.1.0
github.com/gofrs/flock v0.8.0
github.com/gogo/protobuf v1.3.2
+2
View File
@@ -234,6 +234,8 @@ github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo=
github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+3
View File
@@ -182,6 +182,9 @@ func (c *cgroupSystemd) Join() (func(), error) {
return nil, fmt.Errorf("unknown job completion status %q", s)
}
} else if unitAlreadyExists(err) {
if err := c.dbusConn.AttachProcessesToUnit(timedCtx, unitName, "" /* subcgroup */, []uint32{uint32(os.Getpid())}); err != nil {
return nil, fmt.Errorf("error joining systemd unit `%s`: %w", unitName, err)
}
return clean.Release(), nil
} else {
return nil, fmt.Errorf("systemd error: %v", err)