package libcontainerd | |
import "sync" | |
type queue struct { | |
sync.Mutex | |
fns map[string]chan struct{} | |
} | |
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) | |
}() | |
} |