summaryrefslogtreecommitdiff
path: root/test/parallel/test-domain-top-level-error-handler-clears-stack.js
blob: 9dcf038abf9ef40573c027203fcc564570e8cd26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
'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(() => {
  // Scheduling a callback with process.nextTick _could_ enter a _new_ domain,
  // but domain's error handlers are called outside of their domain's context.
  // So there should _no_ domain on the domains stack if the domains stack was
  // cleared properly when the domain error handler was called.
  process.nextTick(() => {
    if (domain._stack.length !== 0) {
      // 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 0, but instead is:',
                    domain._stack.length);
      process.exit(1);
    }
  });
}));

d.run(() => {
  throw new Error('Error from domain');
});