@@ -488,7 +488,7 @@ impl Association {
488
488
let done = Arc :: new ( AtomicBool :: new ( false ) ) ;
489
489
let name = Arc :: new ( name) ;
490
490
491
- while !done. load ( Ordering :: Relaxed ) {
491
+ ' outer : while !done. load ( Ordering :: Relaxed ) {
492
492
//log::debug!("[{}] gather_outbound begin", name);
493
493
let ( packets, continue_loop) = {
494
494
let mut ai = association_internal. lock ( ) . await ;
@@ -512,9 +512,8 @@ impl Association {
512
512
// Doing it this way, tokio schedules this work on a dedicated blocking thread, this future is suspended, and the read_loop can make progress
513
513
match tokio:: task:: spawn_blocking ( move || raw. marshal_to ( & mut buf) . map ( |_| buf) )
514
514
. await
515
- . unwrap ( )
516
515
{
517
- Ok ( mut buf) => {
516
+ Ok ( Ok ( mut buf) ) => {
518
517
let raw = buf. as_ref ( ) ;
519
518
if let Err ( err) = net_conn. send ( raw. as_ref ( ) ) . await {
520
519
log:: warn!( "[{}] failed to write packets on net_conn: {}" , name2, err) ;
@@ -527,9 +526,21 @@ impl Association {
527
526
buf. clear ( ) ;
528
527
buffer = Some ( buf) ;
529
528
}
530
- Err ( err) => {
529
+ Ok ( Err ( err) ) => {
531
530
log:: warn!( "[{}] failed to serialize a packet: {:?}" , name2, err) ;
532
531
}
532
+ Err ( err) => {
533
+ if err. is_cancelled ( ) {
534
+ log:: debug!(
535
+ "[{}] task cancelled while serializing a packet: {:?}" ,
536
+ name,
537
+ err
538
+ ) ;
539
+ break ' outer;
540
+ } else {
541
+ log:: error!( "[{}] panic while serializing a packet: {:?}" , name, err) ;
542
+ }
543
+ }
533
544
}
534
545
//log::debug!("[{}] sending {} bytes done", name, raw.len());
535
546
}
0 commit comments