Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tls: call destroy() on StreamWrap and their streams #23654

Closed
wants to merge 1 commit into from

Conversation

oyyd
Copy link
Contributor

@oyyd oyyd commented Oct 14, 2018

When sockets of the "net" module destroyed, they will call this._handle.close() which will also emit EOF if not emitted before.

This feature makes sockets on the other side emit "end" and "close" even though we haven't called end(). As stream of StreamWrap are likely to be instances of net.Socket, calling destroy() manually will avoid issues that don't properly close wrapped connections.

Fixes: #14605

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines

When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: nodejs#14605
@oyyd oyyd changed the title tls: close StreamWrap and its stream correctly tls: call destroy() on StreamWrap and their streams Oct 14, 2018
Copy link
Member

@addaleax addaleax left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

@jasnell jasnell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/cc @mcollina

@addaleax addaleax added tls Issues and PRs related to the tls subsystem. author ready PRs that have at least one approval, no pending requests for changes, and a CI started. labels Oct 21, 2018
@addaleax
Copy link
Member

Landed in 517955a, thanks for the PR again!

If you don’t see any activity on one of your PRs for a few days, feel free to ping somebody about that. :)

@addaleax addaleax closed this Oct 21, 2018
addaleax pushed a commit that referenced this pull request Oct 21, 2018
When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: #14605

PR-URL: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
@oyyd
Copy link
Contributor Author

oyyd commented Oct 21, 2018

I see. Thanks 😉

jasnell pushed a commit that referenced this pull request Oct 21, 2018
When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: #14605

PR-URL: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
addaleax pushed a commit that referenced this pull request Nov 6, 2018
This test ensures that a tls client socket using `StreamWrap` with
`allowHalfOpen` option won't hang.

PR-URL: #23866
Refs: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
targos pushed a commit that referenced this pull request Nov 6, 2018
This test ensures that a tls client socket using `StreamWrap` with
`allowHalfOpen` option won't hang.

PR-URL: #23866
Refs: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
MylesBorins pushed a commit that referenced this pull request Nov 26, 2018
When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: #14605

PR-URL: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
@MylesBorins
Copy link
Contributor

this lands cleanly on 10.x but has test failure on 8.x

would someone be willing to backport and figure out what is going on?

=== release test-tls-destroy-stream ===
Path: parallel/test-tls-destroy-stream
Mismatched <anonymous> function calls. Expected exactly 1, actual 0.
    at Object.exports.mustCall (/Users/mborins/code/node/v8.x/test/common/index.js:439:10)
    at Socket.conn.once.common.mustCall (/Users/mborins/code/node/v8.x/test/parallel/test-tls-destroy-stream.js:36:35)
    at Socket.<anonymous> (/Users/mborins/code/node/v8.x/test/common/index.js:479:15)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
Mismatched <anonymous> function calls. Expected exactly 1, actual 0.
    at Object.exports.mustCall (/Users/mborins/code/node/v8.x/test/common/index.js:439:10)
    at Socket.conn.once.common.mustCall (/Users/mborins/code/node/v8.x/test/parallel/test-tls-destroy-stream.js:45:35)
    at Socket.<anonymous> (/Users/mborins/code/node/v8.x/test/common/index.js:479:15)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
Command: out/Release/node /Users/mborins/code/node/v8.x/test/parallel/test-tls-destroy-stream.js
=== release test-wrap-js-stream-exceptions ===
Path: parallel/test-wrap-js-stream-exceptions
Mismatched noop function calls. Expected exactly 1, actual 0.
    at Object.exports.mustCall (/Users/mborins/code/node/v8.x/test/common/index.js:439:10)
    at Object.<anonymous> (/Users/mborins/code/node/v8.x/test/parallel/test-wrap-js-stream-exceptions.js:13:16)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
Command: out/Release/node --expose-internals /Users/mborins/code/node/v8.x/test/parallel/test-wrap-js-stream-exceptions.js

MylesBorins pushed a commit that referenced this pull request Nov 26, 2018
This test ensures that a tls client socket using `StreamWrap` with
`allowHalfOpen` option won't hang.

PR-URL: #23866
Refs: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
@codebytere codebytere mentioned this pull request Nov 27, 2018
rvagg pushed a commit that referenced this pull request Nov 28, 2018
When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: #14605

PR-URL: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
rvagg pushed a commit that referenced this pull request Nov 28, 2018
This test ensures that a tls client socket using `StreamWrap` with
`allowHalfOpen` option won't hang.

PR-URL: #23866
Refs: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
MylesBorins pushed a commit that referenced this pull request Nov 29, 2018
When sockets of the "net" module destroyed, they will call
`this._handle.close()` which will also emit EOF if not emitted
before. This feature makes sockets on the other side emit "end" and
"close" even though we haven't called `end()`. As `stream` of
`StreamWrap` are likely to be instances of `net.Socket`, calling
`destroy()` manually will avoid issues that don't properly close
wrapped connections.

Fixes: #14605

PR-URL: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
MylesBorins pushed a commit that referenced this pull request Nov 29, 2018
This test ensures that a tls client socket using `StreamWrap` with
`allowHalfOpen` option won't hang.

PR-URL: #23866
Refs: #23654
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
@codebytere codebytere mentioned this pull request Nov 29, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. tls Issues and PRs related to the tls subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

StreamWrap doesn't properly close the wrapped connection
4 participants