Browse Source

Merge pull request #42320 from anujva/fix_moby_ring_logger

#42316 Wait for `run` goroutine to exit before `Close`
Sebastiaan van Stijn 4 năm trước cách đây
mục cha
commit
08096e3ee6
1 tập tin đã thay đổi với 4 bổ sung0 xóa
  1. 4 0
      daemon/logger/ring.go

+ 4 - 0
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