Skip to content

dgram: generalized send queue to handle close - #7066

Closed
mcollina wants to merge 1 commit into
nodejs:masterfrom
mcollina:dgram-queue
Closed

dgram: generalized send queue to handle close#7066
mcollina wants to merge 1 commit into
nodejs:masterfrom
mcollina:dgram-queue

Conversation

@mcollina

Copy link
Copy Markdown
Member
Checklist
  • tests and code linting passes
  • a test and/or benchmark is included
  • the commit message follows commit guidelines
Affected core subsystem(s)

dgram

Description of change

If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.

Fixes: #7061

If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.
Fixes: nodejs#7061
@nodejs-github-botnodejs-github-bot added the dgram Issues and PRs related to the dgram subsystem / UDP. label May 30, 2016
@mcollina

Copy link
Copy Markdown
MemberAuthor

@mcollina

Copy link
Copy Markdown
MemberAuthor

cc @bnoordhuis@jasnell

Comment threadlib/dgram.js
this._sendQueue = undefined;
});
if (!self._queue) {
self._queue = [];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nothing new in this PR, but this looks like a deopt.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

why?
Plus, this is used during startup only, so I see little harm in deopting there.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The Socket class doesn't have a _queue property in its constructor. I didn't mean a deopt on this function, but on the hidden class for Socket.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yes, I wouldn't worry here, as it will get optimized on the long run, and
it does not add a huge delay during "boot" of a Socket.
Il giorno mar 31 mag 2016 alle 12:00 Ron Korving notifications@github.com
ha scritto:

In lib/dgram.js
#7066 (comment):

@@ -283,20 +283,25 @@ function fixBufferList(list) {
function enqueue(self, toEnqueue) {
// If the send queue hasn't been initialized yet, do it, and install an
// event handler that flushes the send queue after binding is done.

  • if (!self._sendQueue) {
  • self._sendQueue = [];
  • self.once('listening', function() {
  •  // Flush the send queue.
    
  •  for (var i = 0; i < this._sendQueue.length; i++)
    
  •  this.send.apply(self, this._sendQueue[i]);
    
  •  this._sendQueue = undefined;
    
  • });
  • if (!self._queue) {
  • self._queue = [];

The Socket class doesn't have a _queue property in its constructor. I
didn't mean a deopt on this function, but on the hidden class for Socket.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nodejs/node/pull/7066/files/0e094acf5bed6a847c655fc69c33067e29227f60#r65153703,
or mute the thread
https://github.com/notifications/unsubscribe/AADL4wacLUEUMxSKPGvIT5WbfZubJhNZks5qHAaigaJpZM4Ip7BT
.

@mcollinamcollina added semver-minor PRs that contain new features and should be released in the next minor version. lts-watch-v4.x labels May 31, 2016
@mcollina

Copy link
Copy Markdown
MemberAuthor

I'm flagging this semver-minor to be conservative, especially if we decide to backport it. It changes how the "delayed open" works in dgram, so it might cause breakages we do not expect.

@mcollina

Copy link
Copy Markdown
MemberAuthor

@nodejs/collaborators can I get a couple of LGTMs and get that merged?

@i5ting

Copy link
Copy Markdown

LGTM

@@ -0,0 +1,18 @@
'use strict';
// Ensure that if a dgram socket is closed before the sendQueue is drained
// wil not crash

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

typo: will

@addaleax

Copy link
Copy Markdown
Member

LGTM

@mcollina

Copy link
Copy Markdown
MemberAuthor

Landed as a2a711a

mcollina added a commit that referenced this pull request Jul 13, 2016
If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.
Fixes: #7061
PR-URL: #7066
Reviewed-By: Anna Henningsen <anna@addaleax.net>
@cjihrigcjihrig mentioned this pull request Aug 8, 2016
cjihrig pushed a commit that referenced this pull request Aug 10, 2016
If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.
Fixes: #7061
PR-URL: #7066
Reviewed-By: Anna Henningsen <anna@addaleax.net>
@cjihrigcjihrig mentioned this pull request Aug 11, 2016
@MylesBorins

Copy link
Copy Markdown
Contributor

@mcollina do you still believe this should be backported? Can you quickly explain why it is necessary if so? All semver-minor commits need to be agreed upon by the lts working group, so whatever info you can give will be helpful in making the decision

@mcollina

Copy link
Copy Markdown
MemberAuthor

It can be backported. I think it should be backported, because it fixes a bad crash. It's semver minor because it defines some behavior that was unspecified before. I think can leave without, but if you are bumping semver-minor, you might consider letting this in.

@MylesBorinsMylesBorins added this to the 4.7.0 milestone Nov 18, 2016
@MylesBorins

Copy link
Copy Markdown
Contributor

@mcollina are you able to backport this? It is a bit time sensitive as we want to get the commit into the v4.7.0 release which has an r.c. going out Tuesday. Sorry for the rush.

@mcollina
mcollina deleted the dgram-queue branch November 19, 2016 07:48
mcollina added a commit to mcollina/node that referenced this pull request Nov 19, 2016
If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.
Fixes: nodejs#7061
PR-URL: nodejs#7066
Reviewed-By: Anna Henningsen <anna@addaleax.net>
MylesBorins pushed a commit that referenced this pull request Nov 22, 2016
If the udp socket is not ready and we are accumulating
messages to send, it needs to delay closing the socket when
all messages are flushed.
Fixes: #7061
PR-URL: #7066
Reviewed-By: Anna Henningsen <anna@addaleax.net>
@MylesBorinsMylesBorins removed this from the 4.7.0 milestone Nov 22, 2016
@MylesBorinsMylesBorins mentioned this pull request Nov 22, 2016
MylesBorins pushed a commit that referenced this pull request Dec 6, 2016
This LTS release comes with 108 commits. This includes 30 which are doc
related, 28 which are test related, 16 which are build / tool related,
and 4 commits which are updates to dependencies.
Notable Changes:
The SEMVER-MINOR changes include:
* build:
- export openssl symbols on Windows making it possible to build
addons linked against the bundled version of openssl (Alex Hultman)
#7576
* debugger:
- make listen address configurable in the debugger server
(Ben Noordhuis) #3316
* dgram:
- generalized send queue to handle close fixing a potential throw
when dgram socket is closed in the listening event handler.
(Matteo Collina) #7066
* http:
- Introduce the 451 status code "Unavailable For Legal Reasons"
(Max Barinov) #4377
* tls:
- introduce `secureContext` for `tls.connect` which is useful for
caching client certificates, key, and CA certificates.
(Fedor Indutny) #4246
Notable SEMVER-PATCH changes include:
* build:
- introduce the configure --shared option for embedders (sxa555)
#6994
* gtest:
- the test reporter now outputs tap comments as yamlish
(Johan Bergström) #9262
* src:
- node no longer aborts when c-ares initialization fails
(Ben Noordhuis) #8710
* tls:
- fix memory leak when writing data to TLSWrap instance during
handshake (Fedor Indutny)
#9586
PR-URL: #9736
MylesBorins pushed a commit that referenced this pull request Dec 6, 2016
This LTS release comes with 108 commits. This includes 30 which are doc
related, 28 which are test related, 16 which are build / tool related,
and 4 commits which are updates to dependencies.
Notable Changes:
The SEMVER-MINOR changes include:
* build:
- export openssl symbols on Windows making it possible to build
addons linked against the bundled version of openssl (Alex Hultman)
#7576
* debugger:
- make listen address configurable in the debugger server
(Ben Noordhuis) #3316
* dgram:
- generalized send queue to handle close fixing a potential throw
when dgram socket is closed in the listening event handler.
(Matteo Collina) #7066
* http:
- Introduce the 451 status code "Unavailable For Legal Reasons"
(Max Barinov) #4377
* tls:
- introduce `secureContext` for `tls.connect` which is useful for
caching client certificates, key, and CA certificates.
(Fedor Indutny) #4246
Notable SEMVER-PATCH changes include:
* build:
- introduce the configure --shared option for embedders (sxa555)
#6994
* gtest:
- the test reporter now outputs tap comments as yamlish
(Johan Bergström) #9262
* src:
- node no longer aborts when c-ares initialization fails
(Ben Noordhuis) #8710
* tls:
- fix memory leak when writing data to TLSWrap instance during
handshake (Fedor Indutny)
#9586
PR-URL: #9736
MylesBorins pushed a commit that referenced this pull request Dec 6, 2016
This LTS release comes with 108 commits. This includes 30 which are doc
related, 28 which are test related, 16 which are build / tool related,
and 4 commits which are updates to dependencies.
Notable Changes:
The SEMVER-MINOR changes include:
* build:
- export openssl symbols on Windows making it possible to build
addons linked against the bundled version of openssl (Alex Hultman)
#7576
* debugger:
- make listen address configurable in the debugger server
(Ben Noordhuis) #3316
* dgram:
- generalized send queue to handle close fixing a potential throw
when dgram socket is closed in the listening event handler.
(Matteo Collina) #7066
* http:
- Introduce the 451 status code "Unavailable For Legal Reasons"
(Max Barinov) #4377
* tls:
- introduce `secureContext` for `tls.connect` which is useful for
caching client certificates, key, and CA certificates.
(Fedor Indutny) #4246
Notable SEMVER-PATCH changes include:
* build:
- introduce the configure --shared option for embedders (sxa555)
#6994
* gtest:
- the test reporter now outputs tap comments as yamlish
(Johan Bergström) #9262
* src:
- node no longer aborts when c-ares initialization fails
(Ben Noordhuis) #8710
* tls:
- fix memory leak when writing data to TLSWrap instance during
handshake (Fedor Indutny)
#9586
PR-URL: #9736
imyller added a commit to imyller/meta-nodejs that referenced this pull request Dec 7, 2016
 This LTS release comes with 108 commits. This includes 30 which are doc
related, 28 which are test related, 16 which are build / tool related,
and 4 commits which are updates to dependencies.
Notable Changes:
The SEMVER-MINOR changes include:
* build:
- export openssl symbols on Windows making it possible to build
addons linked against the bundled version of openssl (Alex Hultman)
nodejs/node#7576
* debugger:
- make listen address configurable in the debugger server
(Ben Noordhuis) nodejs/node#3316
* dgram:
- generalized send queue to handle close fixing a potential throw
when dgram socket is closed in the listening event handler.
(Matteo Collina) nodejs/node#7066
* http:
- Introduce the 451 status code "Unavailable For Legal Reasons"
(Max Barinov) nodejs/node#4377
* tls:
- introduce `secureContext` for `tls.connect` which is useful for
caching client certificates, key, and CA certificates.
(Fedor Indutny) nodejs/node#4246
Notable SEMVER-PATCH changes include:
* build:
- introduce the configure --shared option for embedders (sxa555)
nodejs/node#6994
* gtest:
- the test reporter now outputs tap comments as yamlish
(Johan Bergstrom) nodejs/node#9262
* src:
- node no longer aborts when c-ares initialization fails
(Ben Noordhuis) nodejs/node#8710
* tls:
- fix memory leak when writing data to TLSWrap instance during
handshake (Fedor Indutny)
nodejs/node#9586
PR-URL: nodejs/node#9736
Signed-off-by: Ilkka Myller <ilkka.myller@nodefield.com>
imyller added a commit to imyller/meta-nodejs that referenced this pull request Dec 7, 2016
 This LTS release comes with 108 commits. This includes 30 which are doc
related, 28 which are test related, 16 which are build / tool related,
and 4 commits which are updates to dependencies.
Notable Changes:
The SEMVER-MINOR changes include:
* build:
- export openssl symbols on Windows making it possible to build
addons linked against the bundled version of openssl (Alex Hultman)
nodejs/node#7576
* debugger:
- make listen address configurable in the debugger server
(Ben Noordhuis) nodejs/node#3316
* dgram:
- generalized send queue to handle close fixing a potential throw
when dgram socket is closed in the listening event handler.
(Matteo Collina) nodejs/node#7066
* http:
- Introduce the 451 status code "Unavailable For Legal Reasons"
(Max Barinov) nodejs/node#4377
* tls:
- introduce `secureContext` for `tls.connect` which is useful for
caching client certificates, key, and CA certificates.
(Fedor Indutny) nodejs/node#4246
Notable SEMVER-PATCH changes include:
* build:
- introduce the configure --shared option for embedders (sxa555)
nodejs/node#6994
* gtest:
- the test reporter now outputs tap comments as yamlish
(Johan Bergstrom) nodejs/node#9262
* src:
- node no longer aborts when c-ares initialization fails
(Ben Noordhuis) nodejs/node#8710
* tls:
- fix memory leak when writing data to TLSWrap instance during
handshake (Fedor Indutny)
nodejs/node#9586
PR-URL: nodejs/node#9736
Signed-off-by: Ilkka Myller <ilkka.myller@nodefield.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dgramIssues and PRs related to the dgram subsystem / UDP.semver-minorPRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mcollina@i5ting@addaleax@MylesBorins@ronkorving@nodejs-github-bot