From 6b97000f220f2eef87a594969c60bd5c900bb2af Mon Sep 17 00:00:00 2001 From: Ouyang Yadong Date: Thu, 10 Oct 2019 12:16:04 +0800 Subject: [PATCH] quic: fix idle timeout After ngtcp2 being updated, `ngtcp2_conn_get_idle_timeout` is renamed as `ngtcp2_conn_get_idle_expiry` which returns `ngtcp2_tstamp` instead of `ngtcp2_duration`. Refs: https://github.com/ngtcp2/ngtcp2/blob/6f40668cdce7db7c043d3a80c07f379841d8c51e/lib/ngtcp2_conn.c#L8604 PR-URL: https://github.com/nodejs/quic/pull/166 Reviewed-By: Anna Henningsen --- src/node_quic_session.cc | 5 ++++- test/parallel/test-quic-idle-timeout.js | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/node_quic_session.cc b/src/node_quic_session.cc index 87cdd8b9ae..f6d20b29dd 100644 --- a/src/node_quic_session.cc +++ b/src/node_quic_session.cc @@ -1527,7 +1527,10 @@ void QuicSession::StreamReset( void QuicSession::UpdateIdleTimer() { CHECK_NOT_NULL(idle_); - uint64_t timeout = ngtcp2_conn_get_idle_expiry(Connection()) / 1000000UL; + uint64_t now = uv_hrtime(); + uint64_t expiry = ngtcp2_conn_get_idle_expiry(Connection()); + uint64_t timeout = (expiry - now) / 1000000UL; + if (expiry < now || timeout == 0) timeout = 1; Debug(this, "Updating idle timeout to %" PRIu64, timeout); idle_->Update(timeout); } diff --git a/test/parallel/test-quic-idle-timeout.js b/test/parallel/test-quic-idle-timeout.js index 646fbe0cfb..0dab601eed 100644 --- a/test/parallel/test-quic-idle-timeout.js +++ b/test/parallel/test-quic-idle-timeout.js @@ -71,10 +71,12 @@ const idleTimeout = common.platformTimeout(1000); idleTimeout, }); - server.on('session', common.mustCall(() => { - client.close(); - server.close(); - assert(Date.now() - start < idleTimeout + error); + server.on('session', common.mustCall((serverSession) => { + serverSession.on('close', common.mustCall(() => { + client.close(); + server.close(); + assert(Date.now() - start < idleTimeout + error); + })); })); server.on('ready', common.mustCall(() => {