'use strict'; const common = require('../common'); const assert = require('assert'); const timers = require('timers'); { const interval = setInterval(common.mustCall(() => { clearTimeout(interval); }), 1).unref(); } { const interval = setInterval(common.mustCall(() => { interval.close(); }), 1).unref(); } { const interval = setInterval(common.mustCall(() => { timers.unenroll(interval); }), 1).unref(); } { const interval = setInterval(common.mustCall(() => { interval._idleTimeout = -1; }), 1).unref(); } { const interval = setInterval(common.mustCall(() => { interval._onTimeout = null; }), 1).unref(); } { const interval = setInterval(common.mustCall(() => { // This case is only necessary / valid prior to // c8c2544cd9c339cdde881fc9a7f0851971b94d72 // which is not on the v4.x branch. assert.strictEqual(typeof interval._repeat, 'function'); process.nextTick(common.mustCall(() => { interval._repeat = null; })); }), 1).unref(); } // Use timers' intrinsic behavior to keep this open // exactly long enough for the problem to manifest. // // See https://github.com/nodejs/node/issues/9561 // // Since this is added after it will always fire later // than the previous timeouts, unrefed or not. // // Keep the event loop alive for one timeout and then // another. Any problems will occur when the second // should be called but before it is able to be. setTimeout(common.mustCall(() => { setTimeout(common.mustCall(() => {}), 1); }), 1);