'use strict'; const common = require('../common'); const domain = require('domain'); /* * Make sure that the domains stack is cleared after a top-level domain * error handler exited gracefully. */ const d = domain.create(); d.on('error', common.mustCall(() => { process.nextTick(() => { // Scheduling a callback with process.nextTick will enter a _new_ domain, // and the callback will be called after the domain that handled the error // was exited. So there should be only one domain on the domains stack if // the domains stack was cleared properly when the domain error handler // returned. if (domain._stack.length !== 1) { // Do not use assert to perform this test: this callback runs in a // different callstack as the original process._fatalException that // handled the original error, thus throwing here would trigger another // call to process._fatalException, and so on recursively and // indefinitely. console.error('domains stack length should be 1, but instead is:', domain._stack.length); process.exit(1); } }); })); d.run(() => { throw new Error('Error from domain'); });