mirror of https://github.com/containers/podman.git
42 lines
742 B
Go
42 lines
742 B
Go
package libpod
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
func (r *Runtime) startWorker() {
|
|
if r.workerChannel == nil {
|
|
r.workerChannel = make(chan func(), 1)
|
|
r.workerShutdown = make(chan bool)
|
|
}
|
|
go func() {
|
|
for {
|
|
// Make sure to read all workers before
|
|
// checking if we're about to shutdown.
|
|
for len(r.workerChannel) > 0 {
|
|
w := <-r.workerChannel
|
|
w()
|
|
}
|
|
|
|
select {
|
|
// We'll read from the shutdown channel only when all
|
|
// items above have been processed.
|
|
//
|
|
// (*Runtime).Shutdown() will block until until the
|
|
// item is read.
|
|
case <-r.workerShutdown:
|
|
return
|
|
|
|
default:
|
|
time.Sleep(100 * time.Millisecond)
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func (r *Runtime) queueWork(f func()) {
|
|
go func() {
|
|
r.workerChannel <- f
|
|
}()
|
|
}
|