From 8ea610c6250c65888b6de4febc404f29b12008c8 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Mon, 4 Oct 2021 08:22:40 +0200 Subject: [PATCH] GODT-1367: Use sync.Once to only close pool jobs once --- pkg/pchan/pchan.go | 9 ++------- pkg/pool/pool.go | 15 +++++++-------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/pkg/pchan/pchan.go b/pkg/pchan/pchan.go index b353a6a6..5348bf0d 100644 --- a/pkg/pchan/pchan.go +++ b/pkg/pchan/pchan.go @@ -26,6 +26,7 @@ type PChan struct { lock sync.Mutex items []*Item ready, done chan struct{} + once sync.Once } type Item struct { @@ -82,13 +83,7 @@ func (ch *PChan) Pop() (interface{}, int, bool) { } func (ch *PChan) Close() { - select { - case <-ch.done: - return - - default: - close(ch.done) - } + ch.once.Do(func() { close(ch.done) }) } func (ch *PChan) push(val interface{}, prio int) *Item { diff --git a/pkg/pool/pool.go b/pkg/pool/pool.go index 2b67fe54..3bf84d46 100644 --- a/pkg/pool/pool.go +++ b/pkg/pool/pool.go @@ -17,7 +17,11 @@ package pool -import "github.com/ProtonMail/proton-bridge/pkg/pchan" +import ( + "sync" + + "github.com/ProtonMail/proton-bridge/pkg/pchan" +) type WorkFunc func(interface{}, int) (interface{}, error) @@ -74,6 +78,7 @@ type Job struct { item *pchan.Item ready, done chan struct{} + once sync.Once } func newJob(req interface{}) *Job { @@ -115,13 +120,7 @@ func (job *Job) setItem(item *pchan.Item) { } func (job *Job) markDone() { - select { - case <-job.done: - return - - default: - close(job.done) - } + job.once.Do(func() { close(job.done) }) } func (job *Job) waitDone() {