Make close concurrent safe

This commit is contained in:
gammazero 2021-06-14 14:03:52 -07:00 committed by vyzo
parent e25f98c402
commit 55d412efa7

View File

@ -2,6 +2,7 @@ package pubsub
import (
"context"
"sync"
)
// Subscription handles the details of a particular Topic subscription.
@ -10,9 +11,9 @@ type Subscription struct {
topic string
ch chan *Message
cancelCh chan<- *Subscription
closed bool
ctx context.Context
err error
once sync.Once
}
// Topic returns the topic string associated with the Subscription
@ -44,8 +45,7 @@ func (sub *Subscription) Cancel() {
}
func (sub *Subscription) close() {
if !sub.closed {
sub.once.Do(func() {
close(sub.ch)
sub.closed = true
}
})
}