mirror of https://github.com/lukechilds/node.git
Browse Source
v8::MaybeLocal::ToLocalChecked() will abort on an empty handle. AsyncWrap::MakeCallback returns an empty handle if the domain is disposed, but this should not cause the process to abort. So instead return v8::Undefined() and allow the error to be handled normally. PR-URL: https://github.com/nodejs/node/pull/14722 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Refael Ackermann <refack@gmail.com>v6
committed by
Anna Henningsen
2 changed files with 28 additions and 2 deletions
@ -0,0 +1,25 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const domain = require('domain'); |
|||
|
|||
// These were picked arbitrarily and are only used to trigger arync_hooks.
|
|||
const JSStream = process.binding('js_stream').JSStream; |
|||
const Socket = require('net').Socket; |
|||
|
|||
const handle = new JSStream(); |
|||
handle.domain = domain.create(); |
|||
handle.domain.dispose(); |
|||
|
|||
handle.close = () => {}; |
|||
handle.isAlive = () => { throw new Error(); }; |
|||
|
|||
const s = new Socket({ handle }); |
|||
|
|||
// When AsyncWrap::MakeCallback() returned an empty handle the
|
|||
// MaybeLocal::ToLocalChecked() call caused the process to abort. By returning
|
|||
// v8::Undefined() it allows the error to propagate to the 'error' event.
|
|||
s.on('error', common.mustCall((e) => { |
|||
assert.strictEqual(e.code, 'EINVAL'); |
|||
})); |
Loading…
Reference in new issue