File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -560,18 +560,32 @@ export abstract class BaseServer extends EventEmitter {
560560 ) ;
561561 const reader = stream . readable . pipeThrough ( transformStream ) . getReader ( ) ;
562562
563+ const closeSession = async ( ) => {
564+ try {
565+ await reader . cancel ( ) ;
566+ } catch ( e ) {
567+ debug (
568+ "error while canceling WebTransport stream reader: %s" ,
569+ e . message ,
570+ ) ;
571+ }
572+ reader . releaseLock ( ) ;
573+ session . close ( ) ;
574+ } ;
575+
563576 // reading the first packet of the stream
564577 const { value, done } = await reader . read ( ) ;
565578 clearTimeout ( timeout ) ;
566579
567580 if ( done ) {
568581 debug ( "stream is closed" ) ;
582+ reader . releaseLock ( ) ;
569583 return ;
570584 }
571585
572586 if ( value . type !== "open" ) {
573587 debug ( "invalid WebTransport handshake" ) ;
574- return session . close ( ) ;
588+ return closeSession ( ) ;
575589 }
576590
577591 if ( value . data === undefined ) {
@@ -599,20 +613,20 @@ export abstract class BaseServer extends EventEmitter {
599613
600614 if ( ! sid || ! hasOwn ( this . clients , sid ) ) {
601615 debug ( "invalid WebTransport handshake" ) ;
602- return session . close ( ) ;
616+ return closeSession ( ) ;
603617 }
604618
605619 const client = this . clients [ sid ] ;
606620
607621 if ( ! client ) {
608622 debug ( "upgrade attempt for closed client" ) ;
609- session . close ( ) ;
623+ return closeSession ( ) ;
610624 } else if ( client . upgrading ) {
611625 debug ( "transport has already been trying to upgrade" ) ;
612- session . close ( ) ;
626+ return closeSession ( ) ;
613627 } else if ( client . upgraded ) {
614628 debug ( "transport had already been upgraded" ) ;
615- session . close ( ) ;
629+ return closeSession ( ) ;
616630 } else {
617631 debug ( "upgrading existing transport" ) ;
618632
You can’t perform that action at this time.
0 commit comments