|
|
@@ -145,7 +145,6 @@ func (s *resubscribeSub) loop() {
|
|
|
func (s *resubscribeSub) subscribe() Subscription {
|
|
|
subscribed := make(chan error)
|
|
|
var sub Subscription
|
|
|
-retry:
|
|
|
for {
|
|
|
s.lastTry = mclock.Now()
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
@@ -157,19 +156,19 @@ retry:
|
|
|
select {
|
|
|
case err := <-subscribed:
|
|
|
cancel()
|
|
|
- if err != nil {
|
|
|
- // Subscribing failed, wait before launching the next try.
|
|
|
- if s.backoffWait() {
|
|
|
- return nil
|
|
|
+ if err == nil {
|
|
|
+ if sub == nil {
|
|
|
+ panic("event: ResubscribeFunc returned nil subscription and no error")
|
|
|
}
|
|
|
- continue retry
|
|
|
+ return sub
|
|
|
}
|
|
|
- if sub == nil {
|
|
|
- panic("event: ResubscribeFunc returned nil subscription and no error")
|
|
|
+ // Subscribing failed, wait before launching the next try.
|
|
|
+ if s.backoffWait() {
|
|
|
+ return nil // unsubscribed during wait
|
|
|
}
|
|
|
- return sub
|
|
|
case <-s.unsub:
|
|
|
cancel()
|
|
|
+ <-subscribed // avoid leaking the s.fn goroutine.
|
|
|
return nil
|
|
|
}
|
|
|
}
|