Skip to content

http2: settle pending write callbacks on stream destroy #60191

http2: settle pending write callbacks on stream destroy

http2: settle pending write callbacks on stream destroy #60191

Triggered via pull request September 13, 2026 17:27
@mcollinamcollina
synchronize #66016
Status Failure
Total duration 40s
Artifacts

commit-lint.yml

on: pull_request_target
lint-commit-message
30s
lint-commit-message
Fit to window
Zoom out
Zoom in

Annotations

1 error
lint-commit-message
# 2e34a6fc04467b2427cecc7aa3eba9d08d1e8e71 ok 1 assisted-by-is-trailer: Assisted-by is a trailer ok 2 co-authored-by-is-trailer: no Co-authored-by metadata ok 3 fixes-url: skipping fixes-url # SKIP ok 4 line-after-title: blank line after title not ok 5 line-length: Line should be <= 72 columns. --- { found: 73, compare: '<=', wanted: 72, at: { line: 7, column: 72, body: [ '', 'When an HTTP/2 stream is destroyed while a write is still in flight,', 'nghttp2 may have already handed the data off to the socket and never', "report the write's completion once the stream or session tears down. In", 'that case the callback that resolves the Writable write is never invoked,', 'so the Writable stays stuck and the event loop never drains, causing', 'test-http2-close-while-writing to time out on macOS.', '', 'In Http2Stream._destroy, settle any write that is still in flight by', 'invoking its callback with the destroy error and resetting writePending.', 'A later native completion callback is then a no-op because writeCb is', 'null and writePending is 0, so the settle is idempotent. Passing the', 'error (rather than null) also drains any buffered writes.', '', 'Fixes: https://github.com/nodejs/node/issues/58252', '', 'Signed-off-by: Matteo Collina <hello@matteocollina.com>', 'Assisted-by: pi-coding-agent' ] } } ... ok 6 signed-off-by: has valid Signed-off-by ok 7 subsystem: valid subsystems [http2] ok 8 title-format: Title is formatted correctly. 0..8 # tests 8 # pass 6 # fail 1 # Please review the commit message guidelines: # https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines npm warn deprecated tap@16.3.10: Versions of tap before v18 are no longer maintained. Please upgrade. npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported npm warn deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead npm warn deprecated libtap@1.4.1: This library is no longer used by node-tap, and is unmaintained. npm warn deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.