@@ -273,6 +273,12 @@ impl Worker {
273
273
274
274
let _ =
275
275
booter_signal. send ( Ok ( ( metric_src, new_runtime. drop_token . clone ( ) ) ) ) ;
276
+
277
+ let span = debug_span ! (
278
+ "poll" ,
279
+ thread = ?std:: thread:: current( ) . id( ) ,
280
+ ) ;
281
+
276
282
let supervise_fut = match imp. clone ( ) . supervise ( & mut new_runtime) {
277
283
Some ( v) => v. boxed ( ) ,
278
284
None if worker_kind. is_user_worker ( ) => return None ,
@@ -290,28 +296,41 @@ impl Worker {
290
296
}
291
297
} ) ;
292
298
293
- let result = imp. on_created ( & mut new_runtime) . await ;
294
- let maybe_uncaught_exception_event = match result. as_ref ( ) {
295
- Ok ( WorkerEvents :: UncaughtException ( ev) ) => Some ( ev. clone ( ) ) ,
296
- Err ( err) => Some ( UncaughtExceptionEvent {
297
- cpu_time_used : 0 ,
298
- exception : err. to_string ( ) ,
299
- } ) ,
299
+ let worker_poll_fut = async move {
300
+ let result = imp. on_created ( & mut new_runtime) . await ;
301
+ let maybe_uncaught_exception_event = match result. as_ref ( ) {
302
+ Ok ( WorkerEvents :: UncaughtException ( ev) ) => Some ( ev. clone ( ) ) ,
303
+ Err ( err) => Some ( UncaughtExceptionEvent {
304
+ cpu_time_used : 0 ,
305
+ exception : err. to_string ( ) ,
306
+ } ) ,
300
307
301
- _ => None ,
302
- } ;
308
+ _ => None ,
309
+ } ;
303
310
304
- if let Some ( ev) = maybe_uncaught_exception_event {
305
- exit. set ( WorkerExitStatus :: WithUncaughtException ( ev) ) . await ;
306
- }
311
+ if let Some ( ev) = maybe_uncaught_exception_event {
312
+ exit. set ( WorkerExitStatus :: WithUncaughtException ( ev) ) . await ;
313
+ }
307
314
308
- drop ( new_runtime) ;
309
- let _ = supervise_fut. await ;
315
+ drop ( new_runtime) ;
316
+ let _ = supervise_fut. await ;
310
317
311
- Some ( result)
318
+ result
319
+ }
320
+ . instrument ( span) ;
321
+
322
+ Some (
323
+ rt. spawn_pinned ( {
324
+ let fut = unsafe { MaskFutureAsSend :: new ( worker_poll_fut) } ;
325
+ move || tokio:: task:: spawn_local ( fut)
326
+ } )
327
+ . await
328
+ . map_err ( anyhow:: Error :: from)
329
+ . and_then ( |it| it. map_err ( anyhow:: Error :: from) )
330
+ . and_then ( |it| it. into_inner ( ) ) ,
331
+ )
312
332
} ;
313
-
314
- let worker_fut = {
333
+ let worker_result_fut = {
315
334
let event_metadata = event_metadata. clone ( ) ;
316
335
async move {
317
336
let Some ( result) = worker_fut. await else {
@@ -349,13 +368,11 @@ impl Worker {
349
368
"worker" ,
350
369
id = worker_name. as_str( ) ,
351
370
kind = %worker_kind,
352
- thread = ?std:: thread:: current( ) . id( ) ,
353
371
metadata = ?event_metadata
354
372
) ) ;
355
373
356
- drop ( rt. spawn_pinned ( {
357
- let worker_fut = unsafe { MaskFutureAsSend :: new ( worker_fut) } ;
358
- move || tokio:: task:: spawn_local ( worker_fut)
374
+ drop ( tokio:: spawn ( unsafe {
375
+ MaskFutureAsSend :: new ( worker_result_fut)
359
376
} ) ) ;
360
377
}
361
378
}
0 commit comments