dotcloud/docker

View on GitHub
container/attach_context.go

Summary

Maintainability
A
0 mins
Test Coverage
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()
}