Merge pull request #1795 from crosbymichael/cgroup-lock

Add lock around task cgroup
This commit is contained in:
Stephen Day 2017-11-22 12:09:02 -08:00 committed by GitHub
commit 8e09b565a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,6 +4,7 @@ package linux
import (
"context"
"sync"
"github.com/pkg/errors"
"google.golang.org/grpc"
@ -23,6 +24,7 @@ import (
// Task on a linux based system
type Task struct {
mu sync.Mutex
id string
pid int
shim *client.Client
@ -72,7 +74,9 @@ func (t *Task) Info() runtime.TaskInfo {
// Start the task
func (t *Task) Start(ctx context.Context) error {
t.mu.Lock()
hasCgroup := t.cg != nil
t.mu.Unlock()
r, err := t.shim.Start(ctx, &shim.StartRequest{
ID: t.id,
})
@ -85,7 +89,9 @@ func (t *Task) Start(ctx context.Context) error {
if err != nil {
return err
}
t.mu.Lock()
t.cg = cg
t.mu.Unlock()
if err := t.monitor.Monitor(t); err != nil {
return err
}
@ -285,6 +291,8 @@ func (t *Task) Process(ctx context.Context, id string) (runtime.Process, error)
// Metrics returns runtime specific system level metric information for the task
func (t *Task) Metrics(ctx context.Context) (interface{}, error) {
t.mu.Lock()
defer t.mu.Unlock()
if t.cg == nil {
return nil, errors.Wrap(errdefs.ErrNotFound, "cgroup does not exist")
}
@ -297,6 +305,8 @@ func (t *Task) Metrics(ctx context.Context) (interface{}, error) {
// Cgroup returns the underlying cgroup for a linux task
func (t *Task) Cgroup() (cgroups.Cgroup, error) {
t.mu.Lock()
defer t.mu.Unlock()
if t.cg == nil {
return nil, errors.Wrap(errdefs.ErrNotFound, "cgroup does not exist")
}