diff --git a/daemon/logger/ring.go b/daemon/logger/ring.go index b6432aed36..658f0fcfd0 100644 --- a/daemon/logger/ring.go +++ b/daemon/logger/ring.go @@ -19,6 +19,7 @@ type RingLogger struct { l Logger logInfo Info closeFlag int32 + wg sync.WaitGroup } var _ SizedLogger = &RingLogger{} @@ -42,6 +43,7 @@ func newRingLogger(driver Logger, logInfo Info, maxSize int64) *RingLogger { l: driver, logInfo: logInfo, } + l.wg.Add(1) go l.run() return l } @@ -93,6 +95,7 @@ func (r *RingLogger) setClosed() { func (r *RingLogger) Close() error { r.setClosed() r.buffer.Close() + r.wg.Wait() // empty out the queue var logErr bool for _, msg := range r.buffer.Drain() { @@ -118,6 +121,7 @@ func (r *RingLogger) Close() error { // logger. // This is run in a goroutine when the RingLogger is created func (r *RingLogger) run() { + defer r.wg.Done() for { if r.closed() { return