From d814385b66b02a66325d1df8786b507bd573bcfd Mon Sep 17 00:00:00 2001 From: Yutaka Hirano Date: Sat, 25 Sep 2021 00:00:40 +0900 Subject: [PATCH] fix --- tools/webtransport/h3/webtransport_h3_server.py | 10 +++++++--- webtransport/connect.any.js | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/webtransport/h3/webtransport_h3_server.py b/tools/webtransport/h3/webtransport_h3_server.py index 2836cd1fdeb37d..62c44991dcee3f 100644 --- a/tools/webtransport/h3/webtransport_h3_server.py +++ b/tools/webtransport/h3/webtransport_h3_server.py @@ -240,6 +240,8 @@ def close(self, close_info: Optional[Tuple[int, bytes]]) -> None: :param close_info The close information to send. """ + if self._handler: + self._handler.disallow_calling_session_closed() assert self._session_stream_id is not None if close_info is not None: code = close_info.code @@ -310,7 +312,7 @@ def __init__(self, session: WebTransportSession, callbacks: Dict[str, Any]) -> None: self._session = session self._callbacks = callbacks - self._called_session_closed = False + self._allow_calling_session_closed = True def _run_callback(self, callback_name: str, *args: Any, **kwargs: Any) -> None: @@ -340,12 +342,14 @@ def datagram_received(self, data: bytes) -> None: def session_closed( self, close_info: Optional[Tuple[int, bytes]], abruptly: bool): - if _called_session_closed: + if not self._allow_calling_session_closed: return - _called_session_closed = True + self._allow_calling_session_closed = False self._run_callback( "session_closed", self._session, close_info, abruptly=abruptly) + def disallow_calling_session_closed(self): + self._allow_calling_session_closed = False class SessionTicketStore: """ diff --git a/webtransport/connect.any.js b/webtransport/connect.any.js index 93df5fe3f478df..c367a77325d556 100644 --- a/webtransport/connect.any.js +++ b/webtransport/connect.any.js @@ -1,6 +1,7 @@ // META: global=window,worker // META: script=/common/get-host-info.sub.js // META: script=resources/webtransport-test-helpers.sub.js +// META: script=/common/utils.js promise_test(async t => { const wt = new WebTransport(webtransport_url('custom-response.py?:status=200'));