blob: 9dd8e9da415d8fbd61ec6a19dbfc9d88ae71426d [file] [log] [blame]
package container
import (
"context"
"sync"
)
// attachContext is the context used for attach calls.
type attachContext struct {
mu sync.Mutex
ctx context.Context
cancelFunc context.CancelFunc
}
// init returns the context for attach calls. It creates a new context
// if no context is created yet.
func (ac *attachContext) init() context.Context {
ac.mu.Lock()
defer ac.mu.Unlock()
if ac.ctx == nil {
ac.ctx, ac.cancelFunc = context.WithCancel(context.Background())
}
return ac.ctx
}
// cancelFunc cancels the attachContext. All attach calls should detach
// after this call.
func (ac *attachContext) cancel() {
ac.mu.Lock()
if ac.ctx != nil {
ac.cancelFunc()
ac.ctx = nil
}
ac.mu.Unlock()
}