Merge pull request #42320 from anujva/fix_moby_ring_logger

#42316 Wait for `run` goroutine to exit before `Close`
This commit is contained in:
Sebastiaan van Stijn 2021-05-27 15:00:03 +02:00 committed by GitHub
commit 08096e3ee6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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