@@ -548,6 +548,7 @@ export abstract class BaseServer extends EventEmitter {
548548 const result = await streamReader . read ( ) ;
549549
550550 if ( result . done ) {
551+ clearTimeout ( timeout ) ;
551552 debug ( "session is closed" ) ;
552553 return ;
553554 }
@@ -559,18 +560,32 @@ export abstract class BaseServer extends EventEmitter {
559560 ) ;
560561 const reader = stream . readable . pipeThrough ( transformStream ) . getReader ( ) ;
561562
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+
562576 // reading the first packet of the stream
563577 const { value, done } = await reader . read ( ) ;
578+ clearTimeout ( timeout ) ;
579+
564580 if ( done ) {
565581 debug ( "stream is closed" ) ;
582+ reader . releaseLock ( ) ;
566583 return ;
567584 }
568585
569- clearTimeout ( timeout ) ;
570-
571586 if ( value . type !== "open" ) {
572587 debug ( "invalid WebTransport handshake" ) ;
573- return session . close ( ) ;
588+ return closeSession ( ) ;
574589 }
575590
576591 if ( value . data === undefined ) {
@@ -598,20 +613,20 @@ export abstract class BaseServer extends EventEmitter {
598613
599614 if ( ! sid || ! hasOwn ( this . clients , sid ) ) {
600615 debug ( "invalid WebTransport handshake" ) ;
601- return session . close ( ) ;
616+ return closeSession ( ) ;
602617 }
603618
604619 const client = this . clients [ sid ] ;
605620
606621 if ( ! client ) {
607622 debug ( "upgrade attempt for closed client" ) ;
608- session . close ( ) ;
623+ return closeSession ( ) ;
609624 } else if ( client . upgrading ) {
610625 debug ( "transport has already been trying to upgrade" ) ;
611- session . close ( ) ;
626+ return closeSession ( ) ;
612627 } else if ( client . upgraded ) {
613628 debug ( "transport had already been upgraded" ) ;
614- session . close ( ) ;
629+ return closeSession ( ) ;
615630 } else {
616631 debug ( "upgrading existing transport" ) ;
617632
0 commit comments