| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent f3c50f5 commit d94a70e
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,56 +1,39 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | - var common = require('../common'); | ||
| 3 | - var assert = require('assert'); | ||
| 4 | - var domain = require('domain'); | ||
| 5 | - var disposalFailed = false; | ||
| 2 | + const common = require('../common'); | ||
| 3 | + const assert = require('assert'); | ||
| 4 | + const domain = require('domain'); | ||
| 6 | 5 | ||
| 7 | - // no matter what happens, we should increment a 10 times. | ||
| 8 | - var a = 0; | ||
| 9 | - log(); | ||
| 10 | - function log() { | ||
| 11 | - console.log(a++, process.domain); | ||
| 12 | - if (a < 10) setTimeout(log, 20); | ||
| 13 | - } | ||
| 14 | - | ||
| 15 | - var secondTimerRan = false; | ||
| 16 | - | ||
| 17 | - // in 50ms we'll throw an error. | ||
| 6 | + // Use the same timeout value so that both timers' callbacks are called during | ||
| 7 | + // the same invocation of the underlying native timer's callback (listOnTimeout | ||
| 8 | + // in lib/timers.js). | ||
| 18 | 9 | setTimeout(err, 50); | |
| 19 | - setTimeout(secondTimer, 50); | ||
| 10 | + setTimeout(common.mustCall(secondTimer), 50); | ||
| 11 | + | ||
| 20 | 12 | function err() { | |
| 21 | - var d = domain.create(); | ||
| 22 | - d.on('error', handle); | ||
| 13 | + const d = domain.create(); | ||
| 14 | + d.on('error', handleDomainError); | ||
| 23 | 15 | d.run(err2); | |
| 24 | 16 | ||
| 25 | 17 | function err2() { | |
| 26 | - // this timeout should never be called, since the domain gets | ||
| 27 | - // disposed when the error happens. | ||
| 28 | - setTimeout(function() { | ||
| 29 | - console.error('This should not happen.'); | ||
| 30 | - disposalFailed = true; | ||
| 31 | - process.exit(1); | ||
| 32 | - }); | ||
| 33 | - | ||
| 34 | 18 | // this function doesn't exist, and throws an error as a result. | |
| 35 | 19 | err3(); | |
| 36 | 20 | } | |
| 37 | 21 | ||
| 38 | - function handle(e) { | ||
| 39 | - // this should clean up everything properly. | ||
| 40 | - d.dispose(); | ||
| 41 | - console.error(e); | ||
| 42 | - console.error('in handler', process.domain, process.domain === d); | ||
| 22 | + function handleDomainError(e) { | ||
| 23 | + // In the domain's error handler, the current active domain should be the | ||
| 24 | + // domain within which the error was thrown. | ||
| 25 | + assert.equal(process.domain, d); | ||
| 43 | 26 | } | |
| 44 | 27 | } | |
| 45 | 28 | ||
| 46 | 29 | function secondTimer() { | |
| 47 | - console.log('In second timer'); | ||
| 48 | - secondTimerRan = true; | ||
| 30 | + // secondTimer was scheduled before any domain had been created, so its | ||
| 31 | + // callback should not have any active domain set when it runs. | ||
| 32 | + // Do not use assert here, as it throws errors and if a domain with an error | ||
| 33 | + // handler is active, then asserting wouldn't make the test fail. | ||
| 34 | + if (process.domain !== null) { | ||
| 35 | + console.log('process.domain should be null, but instead is:', | ||
| 36 | + process.domain); | ||
| 37 | + process.exit(1); | ||
| 38 | + } | ||
| 49 | 39 | } | |
| 50 | - | ||
| 51 | - process.on('exit', function() { | ||
| 52 | - assert.equal(a, 10); | ||
| 53 | - assert.equal(disposalFailed, false); | ||
| 54 | - assert(secondTimerRan); | ||
| 55 | - console.log('ok'); | ||
| 56 | - }); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments