GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — dgram: copy the array when using the list variant in send() by mcollina · Pull Request #6804 · nodejs/node Conversation
|
|
LGTM if CI is green. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
This should be backported to v5. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
There are some failures on freebsd and smartos, I think they are transient, rerunning: https://ci.nodejs.org/job/node-test-pull-request/2697/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
LGTM but bonus points if you also add a fix + regression test for the empty array case. It's okay to do it in a separate commit because it's arguably a separate issue. Aside: I'm slightly surprised the linter accepts the assign-in-if syntax. But if the linter is okay with it, then I am, too. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@bnoordhuis done, I'm adding an empty buffer if the array is empty, or do you think that throwing will be better? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It's more of a personal preference but can you use buffer.push(...)? That makes it clear we're appending, not replacing, without having to look at the surrounding code.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
A small nit about the first commit: the first line of the commit log should be <= 50 characters. While you're working on |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
c9e6e80 to
09604f8
Compare
|
@bnoordhuis update with the nit you asked! Let me know if you are ok with this, and I'll land it. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Can we get rid of the timer?
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes. It allows fast-failures, otherwise you rely on the 1 minute timeout that each tests has.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yes, but these kind of timers have been source of flaky tests. I don't think relying in the test runner timeout is a bad idea.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
The problem are not the timers, UDP messages can get lost: that's why the tests are flaky. If it has not arrived after 200ms (adjusted for platforms), it will never arrive. We might discuss on increasing those timeouts to reduce the likelyhood of missing a "right" message.
There will always be flaky tests on UDP if we want high coverage.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
I understand that: it's UDP.
But I think these kind timers (the test is taking longer than expected so we throw) should only exist when testing timing related features (timers, connection timers, etc.) otherwise the test runner should catch them. I think @Trott made some good points here: nodejs/testing#27 (comment).
Anyway, I'm fine either way.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
All tests of UDP are done in the same way. If we want to change those, we can (and probably we should). It's definite a different PR as this is becoming more and more full of stuff.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
It makes sense to me.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@santigimeno I've updated the tests. BTW, should we kick off @nodejs/dgram? Let me know if anybody would like to change anything else :) These looks like 4 independent commits, what metadata should I apply to those in the message editing phase? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
list is a better name for the argument and, arguably, fixBufferList for the function.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
There are failures on the OS X and ARM buildbots. The FreeBSD test failure appears to be unrelated. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
27e05fb to
05ad943
Compare
|
@bnoordhuis addressed your nits. new CI: https://ci.nodejs.org/job/node-test-pull-request/2735/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
common.platformTimeout(200)
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
LGTM with comment. Was your plan to squash the last two commits into the first two? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@bnoordhuis I still see 4 commits, or maybe I did some mistake on git and github is not picking that up. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
05ad943 to
4bbdb54
Compare
|
CI: https://ci.nodejs.org/job/node-test-pull-request/2736/ I did a couple of fix to avoid some flakyness. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
4bbdb54 to
8a3d435
Compare
|
new CI: https://ci.nodejs.org/job/node-test-pull-request/2737/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
new new CI: https://ci.nodejs.org/job/node-test-pull-request/2739/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
8a3d435 to
bcaa1c9
Compare
|
Again with some changes: https://ci.nodejs.org/job/node-test-pull-request/2740/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
@nodejs/build can you please have a look at the 'parallel/test-dgram-send-empty-array ' test in this PR on OS X? I think it should pass, but it is currently failing and I cannot understand why. I've run it thousands of times here and I got zero failures. This is the last run: https://ci.nodejs.org/job/node-test-commit-osx/3487/nodes=osx1010/tapTestReport/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Any chance that this is nodejs/node-v0.x-archive#8023 resurfacing? You could try removing the skip in https://github.com/nodejs/node/blob/master/test/parallel/test-dgram-empty-packet.js and running the CI on OS X. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
7e1a6c9 to
1b8c3e2
Compare
|
@cjihrig it should be it. Maybe the CI box is not running El Capitan? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
1b8c3e2 to
7b65d94
Compare
|
Thanks @cjihrig for the support, that was it. New CI with the fix: https://ci.nodejs.org/job/node-test-pull-request/2770/ |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
ci passing, @jasnell @bnoordhuis please give a last pass before I merge. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
LGTM but I only gave it a real quick look-over this time around. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
This commit fix a possible crash situation in dgram send(). A crash is possible if an array is passed, and then altered after the send call, as the call to libuv is wrapped in process.nextTick(). Fixes: nodejs#6616
Sending an empty array was crashing in libuv, this commit allocates an empty buffer to allow sending an empty array.
nits about variable names and push()
Fixes situations were some events were not asserted to be emitted. Removed some flakyness from tests.
7b65d94 to
e1a4eee
Compare
|
CI after rebase https://ci.nodejs.org/job/node-test-pull-request/2777/ (didn't apply cleanly) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
LGTM |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@mcollina ... saw your question in IRC re: squashing the commits or not.... I would go ahead and squash before landing |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Landed as c14e98b. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
This commit fix a possible crash situation in dgram send(). A crash is possible if an array is passed, and then altered after the send call, as the call to libuv is wrapped in process.nextTick(). It also avoid sending an empty array to libuv by allocating an empty buffer. It also does some cleanup inside send() to increase readability. It removes test flakyness by use common.mustCall and common.platformTimeout. Fixes situations were some events were not asserted to be emitted. Fixes: #6616 PR-URL: #6804 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]>
This commit fix a possible crash situation in dgram send(). A crash is possible if an array is passed, and then altered after the send call, as the call to libuv is wrapped in process.nextTick(). It also avoid sending an empty array to libuv by allocating an empty buffer. It also does some cleanup inside send() to increase readability. It removes test flakyness by use common.mustCall and common.platformTimeout. Fixes situations were some events were not asserted to be emitted. Fixes: nodejs#6616 PR-URL: nodejs#6804 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]>
This commit fix a possible crash situation in dgram send(). A crash is possible if an array is passed, and then altered after the send call, as the call to libuv is wrapped in process.nextTick(). It also avoid sending an empty array to libuv by allocating an empty buffer. It also does some cleanup inside send() to increase readability. It removes test flakyness by use common.mustCall and common.platformTimeout. Fixes situations were some events were not asserted to be emitted. Fixes: #6616 PR-URL: #6804 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]>
|
@mcollina lts? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@thealphanerd this depends on #4374, which hasn't been ported yet. I'm 👍 on both. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I'm going to assume that #4374 will not land in LTS as it does not increase stability. As such I will label this as don't land for now. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I'm neutral, the only reason to have it on the v4 like is to encourage adoption of this API. It's not that useful with support only on v5 and v6. But, I agree with you that it does not increase stability. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
dgram: socket.send() crash when input array is modified
There was an error while loading. Please reload this page.