diff --git a/subscription.go b/subscription.go index cf1362269746eda1671e5de4239c2b17ac54fb55..0745f8dc59d039de3ac5b47e8f7c3c1b54507d67 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 - } + }) }