text: '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');
  });
  