in logger/buffered_logger.go [333:360]
func (b *ringBuffer) Dequeue() (*dockerlogger.Message, error) {
b.lock.Lock()
defer b.lock.Unlock()
// If there is no log yet in the buffer, and the ring buffer is still open, wait
// suspends current go routine.
for len(b.queue) == 0 && !b.isClosed {
if debug.Verbose {
debug.SendEventsToLog(DaemonName,
"No messages in queue, waiting...",
debug.DEBUG, 0)
}
b.wait.Wait()
}
// Directly return if ring buffer is closed.
if b.isClosed {
return nil, nil //nolint: nilnil // swallow the error
}
// Get and remove the oldest message saved in buffer/queue from head and update
// the current used bytes of buffer.
msg := b.queue[0]
b.queue = b.queue[1:]
b.curSizeInBytes -= len(msg.Line)
return msg, nil
}