@@ -96,7 +96,9 @@ func (r *Reaper) reaperLoop() {
9696 Int ("consecutive_failures" , consecutiveFailures ).
9797 Dur ("backoff" , backoff ).
9898 Msg ("reaper error, backing off" )
99- r .wait (backoff , cleanupTicker .C )
99+ if r .wait (backoff , nil ) {
100+ return
101+ }
100102 continue
101103 }
102104
@@ -109,21 +111,28 @@ func (r *Reaper) reaperLoop() {
109111 continue
110112 }
111113
112- r .wait (r .interval , cleanupTicker .C )
114+ if r .wait (r .interval , cleanupTicker .C ) {
115+ return
116+ }
113117 }
114118}
115119
116- func (r * Reaper ) wait (d time.Duration , cleanupCh <- chan time.Time ) {
120+ // wait blocks for the given duration. Returns true if the context was cancelled.
121+ // When cleanupCh is non-nil, processes cache cleanup if that channel fires first.
122+ func (r * Reaper ) wait (d time.Duration , cleanupCh <- chan time.Time ) bool {
117123 timer := time .NewTimer (d )
118124 defer timer .Stop ()
119125 select {
120126 case <- r .ctx .Done ():
127+ return true
121128 case <- cleanupCh :
122129 removed := r .cache .CleanupOldTxs (cache .DefaultTxCacheRetention )
123130 if removed > 0 {
124131 r .logger .Info ().Int ("removed" , removed ).Msg ("cleaned up old transaction hashes" )
125132 }
133+ return false
126134 case <- timer .C :
135+ return false
127136 }
128137}
129138
@@ -156,7 +165,7 @@ func (r *Reaper) drainMempool() (bool, error) {
156165
157166 filtered := r .filterNewTxs (txs )
158167 if len (filtered ) == 0 {
159- continue
168+ break
160169 }
161170
162171 n , err := r .submitFiltered (filtered )
0 commit comments