@@ -226,6 +226,18 @@ impl<const PING: bool> HandlerLoop<'_, PING> {
226
226
self . stop_task ( & file_id, Status :: FileRejected ) . await ;
227
227
}
228
228
}
229
+
230
+ fn take_pause_futures ( & mut self ) -> impl Future < Output = ( ) > {
231
+ let jobs = std:: mem:: take ( & mut self . jobs ) ;
232
+
233
+ async move {
234
+ let tasks = jobs. into_values ( ) . map ( |task| async move {
235
+ task. events . pause ( ) . await ;
236
+ } ) ;
237
+
238
+ futures:: future:: join_all ( tasks) . await ;
239
+ }
240
+ }
229
241
}
230
242
231
243
#[ async_trait:: async_trait]
@@ -359,20 +371,18 @@ impl<const PING: bool> handler::HandlerLoop for HandlerLoop<'_, PING> {
359
371
async fn finalize_success ( mut self ) {
360
372
debug ! ( self . logger, "Finalizing" ) ;
361
373
}
374
+
375
+ // While the destructor ensures the events are paused this function waits for
376
+ // the execution to be finished
377
+ async fn finalize_failure ( mut self ) {
378
+ self . take_pause_futures ( ) . await ;
379
+ }
362
380
}
363
381
364
382
impl < const PING : bool > Drop for HandlerLoop < ' _ , PING > {
365
383
fn drop ( & mut self ) {
366
384
debug ! ( self . logger, "Stopping server handler" ) ;
367
-
368
- let jobs = std:: mem:: take ( & mut self . jobs ) ;
369
- tokio:: spawn ( async move {
370
- let tasks = jobs. into_values ( ) . map ( |task| async move {
371
- task. events . pause ( ) . await ;
372
- } ) ;
373
-
374
- futures:: future:: join_all ( tasks) . await ;
375
- } ) ;
385
+ tokio:: spawn ( self . take_pause_futures ( ) ) ;
376
386
}
377
387
}
378
388
0 commit comments