|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|