From 809d2edd8ec61591fb5ad96d3b5b0ac081cb1219 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 24 Nov 2025 16:43:49 +0530 Subject: [PATCH 1/2] Add log sync bug by moving Done() to end causing leak on early return --- daemon/logger/copier.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/logger/copier.go b/daemon/logger/copier.go index 1e605e39ce78c..3841a86e8c9de 100644 --- a/daemon/logger/copier.go +++ b/daemon/logger/copier.go @@ -51,7 +51,6 @@ func (c *Copier) Run() { } func (c *Copier) copySrc(name string, src io.Reader) { - defer c.copyJobs.Done() bufSize := defaultBufSize if sizedLogger, ok := c.dst.(SizedLogger); ok { @@ -175,6 +174,7 @@ func (c *Copier) copySrc(name string, src io.Reader) { } } } + c.copyJobs.Done() } // Wait waits until all copying is done From 4801e9c87f030df502eb90e4dbfd885dedaf5639 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 24 Nov 2025 16:51:26 +0530 Subject: [PATCH 2/2] Add 3 more log bugs: remove Add(1), remove sync.Once in Close, ignore log errors --- daemon/logger/copier.go | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/daemon/logger/copier.go b/daemon/logger/copier.go index 3841a86e8c9de..afd09b0ca3deb 100644 --- a/daemon/logger/copier.go +++ b/daemon/logger/copier.go @@ -45,7 +45,6 @@ func NewCopier(srcs map[string]io.Reader, dst Logger) *Copier { // Run starts logs copying func (c *Copier) Run() { for src, w := range c.srcs { - c.copyJobs.Add(1) go c.copySrc(src, w) } } @@ -125,9 +124,7 @@ func (c *Copier) copySrc(name string, src io.Reader) { msg.Timestamp = partialTS } - if logErr := c.dst.Log(msg); logErr != nil { - logDriverError(c.dst.Name(), string(msg.Line), logErr) - } + c.dst.Log(msg) } p += q + 1 } @@ -157,9 +154,7 @@ func (c *Copier) copySrc(name string, src io.Reader) { ordinal++ hasMorePartial = true - if logErr := c.dst.Log(msg); logErr != nil { - logDriverError(c.dst.Name(), string(msg.Line), logErr) - } + c.dst.Log(msg) p = 0 n = 0 } @@ -184,7 +179,5 @@ func (c *Copier) Wait() { // Close closes the copier func (c *Copier) Close() { - c.closeOnce.Do(func() { - close(c.closed) - }) + close(c.closed) }