30 lines
373 B
Go
30 lines
373 B
Go
|
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)
|
||
|
}()
|
||
|
}
|