3131{
3232 inner : Inner < W > ,
3333 waker_set : waker:: Set ,
34- root_waker : Option < Waker > ,
3534}
3635
3736/// Split the tasks from the waker set to avoid ownership issues
@@ -120,11 +119,7 @@ where
120119 sojourn_time : RttEstimator :: new ( Duration :: from_secs ( 30 ) ) ,
121120 } ;
122121
123- Self {
124- inner,
125- waker_set,
126- root_waker : None ,
127- }
122+ Self { inner, waker_set }
128123 }
129124
130125 #[ inline]
@@ -149,19 +144,8 @@ where
149144
150145 /// Must be called before polling any workers
151146 #[ inline]
152- pub fn update_task_context ( & mut self , cx : & mut task:: Context ) {
153- let new_waker = cx. waker ( ) ;
154-
155- let root_task_requires_update = if let Some ( waker) = self . root_waker . as_ref ( ) {
156- !waker. will_wake ( new_waker)
157- } else {
158- true
159- } ;
160-
161- if root_task_requires_update {
162- self . waker_set . update_root ( new_waker) ;
163- self . root_waker = Some ( new_waker. clone ( ) ) ;
164- }
147+ pub fn poll_start ( & mut self , cx : & mut task:: Context ) {
148+ self . waker_set . poll_start ( cx) ;
165149 }
166150
167151 #[ inline]
@@ -221,8 +205,15 @@ where
221205 Pub : EndpointPublisher ,
222206 C : Clock ,
223207 {
208+ let ready = self . waker_set . drain ( ) ;
209+
210+ // no need to actually poll any workers if none are active
211+ if self . inner . by_sojourn_time . is_empty ( ) {
212+ return ControlFlow :: Continue ( ( ) ) ;
213+ }
214+
224215 // poll any workers that are ready
225- for idx in self . waker_set . drain ( ) {
216+ for idx in ready {
226217 if self . inner . poll_worker ( idx, cx, publisher, clock) . is_break ( ) {
227218 return ControlFlow :: Break ( ( ) ) ;
228219 }
0 commit comments