• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright Joyent, Inc. and other Node contributors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a
4// copy of this software and associated documentation files (the
5// "Software"), to deal in the Software without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Software, and to permit
8// persons to whom the Software is furnished to do so, subject to the
9// following conditions:
10//
11// The above copyright notice and this permission notice shall be included
12// in all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22'use strict';
23const common = require('../common');
24const assert = require('assert');
25
26if (process.argv[2] !== 'child') {
27  const spawn = require('child_process').spawn;
28  const child = spawn(process.execPath, [__filename, 'child'], {
29    stdio: 'pipe'// 'inherit'
30  });
31  const timer = setTimeout(function() {
32    throw new Error('child is hung');
33  }, common.platformTimeout(3000));
34  child.on('exit', common.mustCall(function(code) {
35    assert.strictEqual(code, 0);
36    clearTimeout(timer);
37  }));
38} else {
39
40  const domain = require('domain');
41  const d = domain.create();
42
43  // In the error handler, we trigger several MakeCallback events
44  d.on('error', function() {
45    console.log('a');
46    console.log('b');
47    console.log('c');
48    console.log('d');
49    console.log('e');
50    f();
51  });
52
53  function f() {
54    process.nextTick(function() {
55      d.run(function() {
56        throw new Error('x');
57      });
58    });
59  }
60
61  f();
62  setImmediate(function() {
63    console.error('broke in!');
64    process.exit(0);
65  });
66}
67