mirror of
https://github.com/nodejs/node.git
synced 2025-05-09 13:05:07 +00:00

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>
26 lines
789 B
JavaScript
26 lines
789 B
JavaScript
'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');
|
|
}));
|