package queue // import "github.com/docker/docker/libcontainerd/queue" import "sync" // Queue is the structure used for holding functions in a queue. type Queue struct { sync.Mutex fns map[string]chan struct{} } // Append adds an item to a queue. func (q *Queue) Append(id string, f func()) { q.Lock() defer q.Unlock() if q.fns == nil { q.fns = make(map[string]chan struct{}) } done := make(chan struct{}) fn, ok := q.fns[id] q.fns[id] = done go func() { if ok { <-fn } f() close(done) q.Lock() if q.fns[id] == done { delete(q.fns, id) } q.Unlock() }() }