reuse timer in Retry func
Cenk Alti
5 years ago
27 | 27 | func RetryNotify(operation Operation, b BackOff, notify Notify) error { |
28 | 28 | var err error |
29 | 29 | var next time.Duration |
30 | var t *time.Timer | |
30 | 31 | |
31 | 32 | cb := ensureContext(b) |
32 | 33 | |
48 | 49 | notify(err, next) |
49 | 50 | } |
50 | 51 | |
51 | t := time.NewTimer(next) | |
52 | if t == nil { | |
53 | t = time.NewTimer(next) | |
54 | defer t.Stop() | |
55 | } else { | |
56 | t.Reset(next) | |
57 | } | |
52 | 58 | |
53 | 59 | select { |
54 | 60 | case <-cb.Context().Done(): |
55 | t.Stop() | |
56 | 61 | return err |
57 | 62 | case <-t.C: |
58 | 63 | } |