WithLease: always return context and done fn

We should never return a nil context because of the way this function is
typically used... e.g.

```
  ctx, done, err := containerd.WithLease(ctx)
```

If there is an error `ctx` will be nil and any error handling may cause
an NPE if it tries to use `ctx`.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
Brian Goff
2020-04-25 21:02:47 -07:00
parent 98b30f4690
commit 1a10211e3f
3 changed files with 33 additions and 33 deletions

View File

@@ -25,11 +25,11 @@ import (
// WithLease attaches a lease on the context
func (c *Client) WithLease(ctx context.Context, opts ...leases.Opt) (context.Context, func(context.Context) error, error) {
nop := func(context.Context) error { return nil }
_, ok := leases.FromContext(ctx)
if ok {
return ctx, func(context.Context) error {
return nil
}, nil
return ctx, nop, nil
}
ls := c.LeasesService()
@@ -44,7 +44,7 @@ func (c *Client) WithLease(ctx context.Context, opts ...leases.Opt) (context.Con
l, err := ls.Create(ctx, opts...)
if err != nil {
return nil, nil, err
return ctx, nop, err
}
ctx = leases.WithLease(ctx, l.ID)