diff --git a/coderd/database/pubsub/pubsub.go b/coderd/database/pubsub/pubsub.go index f661e885c2848..731466efd78e2 100644 --- a/coderd/database/pubsub/pubsub.go +++ b/coderd/database/pubsub/pubsub.go @@ -162,13 +162,15 @@ func (q *msgQueue) dropped() { // Pubsub implementation using PostgreSQL. type pgPubsub struct { - ctx context.Context - cancel context.CancelFunc - listenDone chan struct{} - pgListener *pq.Listener - db *sql.DB - mut sync.Mutex - queues map[string]map[uuid.UUID]*msgQueue + ctx context.Context + cancel context.CancelFunc + listenDone chan struct{} + pgListener *pq.Listener + db *sql.DB + mut sync.Mutex + queues map[string]map[uuid.UUID]*msgQueue + closedListener bool + closeListenerErr error } // BufferSize is the maximum number of unhandled messages we will buffer @@ -240,15 +242,29 @@ func (p *pgPubsub) Publish(event string, message []byte) error { // Close closes the pubsub instance. func (p *pgPubsub) Close() error { p.cancel() - err := p.pgListener.Close() + err := p.closeListener() <-p.listenDone return err } +// closeListener closes the pgListener, unless it has already been closed. +func (p *pgPubsub) closeListener() error { + p.mut.Lock() + defer p.mut.Unlock() + if p.closedListener { + return p.closeListenerErr + } + p.closeListenerErr = p.pgListener.Close() + p.closedListener = true + return p.closeListenerErr +} + // listen begins receiving messages on the pq listener. func (p *pgPubsub) listen() { - defer close(p.listenDone) - defer p.pgListener.Close() + defer func() { + _ = p.closeListener() + close(p.listenDone) + }() var ( notif *pq.Notification diff --git a/helm/provisioner/charts/libcoder-0.1.0.tgz b/helm/provisioner/charts/libcoder-0.1.0.tgz index ce216fcde6778..e90f7d3038e12 100644 Binary files a/helm/provisioner/charts/libcoder-0.1.0.tgz and b/helm/provisioner/charts/libcoder-0.1.0.tgz differ
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: