diff --git a/subscription.go b/subscription.go index cf136226..0745f8dc 100644 --- a/subscription.go +++ b/subscription.go @@ -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 - } + }) }