%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Flags: --expose-internals 'use strict'; const common = require('../common'); const assert = require('assert'); const internal_async_hooks = require('internal/async_hooks'); const { spawn } = require('child_process'); const corruptedMsg = /async hook stack has become corrupted/; const heartbeatMsg = /heartbeat: still alive/; const { newAsyncId, getDefaultTriggerAsyncId, emitInit, emitBefore, emitAfter, emitDestroy } = internal_async_hooks; const initHooks = require('./init-hooks'); if (process.argv[2] === 'child') { const hooks = initHooks(); hooks.enable(); // Once 'destroy' has been emitted, we can no longer emit 'before' // Emitting 'before', 'after' and then 'destroy' { const asyncId = newAsyncId(); const triggerId = getDefaultTriggerAsyncId(); emitInit(asyncId, 'event1', triggerId, {}); emitBefore(asyncId, triggerId); emitAfter(asyncId); emitDestroy(asyncId); } // Emitting 'before' after 'destroy' { const asyncId = newAsyncId(); const triggerId = getDefaultTriggerAsyncId(); emitInit(asyncId, 'event2', triggerId, {}); emitDestroy(asyncId); console.log('heartbeat: still alive'); emitBefore(asyncId, triggerId); } } else { const args = ['--expose-internals'] .concat(process.argv.slice(1)) .concat('child'); let errData = Buffer.from(''); let outData = Buffer.from(''); const child = spawn(process.execPath, args); child.stderr.on('data', (d) => { errData = Buffer.concat([ errData, d ]); }); child.stdout.on('data', (d) => { outData = Buffer.concat([ outData, d ]); }); child.on('close', common.mustCall((code) => { assert.strictEqual(code, 1); assert.match(outData.toString(), heartbeatMsg, 'did not crash until we reached offending line of code ' + `(found ${outData})`); assert.match(errData.toString(), corruptedMsg, 'printed error contains corrupted message ' + `(found ${errData})`); })); }