From feb75d493ac8c78c41e9f2346d17f528be6f1dfd Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Tue, 7 Aug 2018 11:22:10 -0700 Subject: [PATCH] Lock buffer when adding metrics (#4514) This function is not thread-safe but is currently used by multiple goroutines in RunningOutput --- internal/buffer/buffer.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index cdc81fed3..04835e042 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -40,18 +40,18 @@ func (b *Buffer) Len() int { // Add adds metrics to the buffer. func (b *Buffer) Add(metrics ...telegraf.Metric) { + b.mu.Lock() for i, _ := range metrics { MetricsWritten.Incr(1) select { case b.buf <- metrics[i]: default: - b.mu.Lock() MetricsDropped.Incr(1) <-b.buf b.buf <- metrics[i] - b.mu.Unlock() } } + b.mu.Unlock() } // Batch returns a batch of metrics of size batchSize.