From 866270ff05379c571c665940a7c1b2010891e960 Mon Sep 17 00:00:00 2001 From: Ophestra Umiker Date: Sun, 17 Nov 2024 23:50:02 +0900 Subject: [PATCH] fmsg: add to wg prior to enqueue Adding after channel write is racy. Signed-off-by: Ophestra Umiker --- internal/fmsg/defer.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/fmsg/defer.go b/internal/fmsg/defer.go index 0f3f5ad..0161e27 100644 --- a/internal/fmsg/defer.go +++ b/internal/fmsg/defer.go @@ -33,16 +33,17 @@ func dequeue() { // queue submits ops to msgbuf but drops messages // when the buffer is full and dequeue is withholding func queue(op dOp) { + queueSync.Add(1) + select { case msgbuf <- op: - queueSync.Add(1) default: // send the op anyway if not withholding // as dequeue will get to it eventually if !wstate.Load() { - queueSync.Add(1) msgbuf <- op } else { + queueSync.Done() // increment dropped message count dropped.Add(1) }