diff options
author | Eugene Ostroukhov <eostroukhov@google.com> | 2019-07-05 18:01:56 -0700 |
---|---|---|
committer | Michaƫl Zasso <targos@protonmail.com> | 2019-07-20 11:13:03 +0200 |
commit | aba0cf33ecf97fe690f0b5de5c3c103076e23b3a (patch) | |
tree | c92ca71fbe1d4eba5a4aca712358f190ea41cce3 /test | |
parent | 638c8a394cfc6547ecc9bec6397f87b9ca8d513c (diff) | |
download | android-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.tar.gz android-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.tar.bz2 android-node-v8-aba0cf33ecf97fe690f0b5de5c3c103076e23b3a.zip |
inspector: do not change async call stack depth if the worker is done
Fixes: https://github.com/nodejs/node/issues/28528
PR-URL: https://github.com/nodejs/node/pull/28613
Reviewed-By: Aleksei Koziatinskii <ak239spb@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/parallel/test-inspector-async-hook-after-done.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/parallel/test-inspector-async-hook-after-done.js b/test/parallel/test-inspector-async-hook-after-done.js new file mode 100644 index 0000000000..10916acd0f --- /dev/null +++ b/test/parallel/test-inspector-async-hook-after-done.js @@ -0,0 +1,60 @@ +'use strict'; + +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const assert = require('assert'); +const { Worker } = require('worker_threads'); +const { Session } = require('inspector'); + +const session = new Session(); + +let done = false; + +session.connect(); + +session.on('NodeWorker.attachedToWorker', ({ params: { sessionId } }) => { + let id = 1; + function postToWorkerInspector(method, params) { + session.post('NodeWorker.sendMessageToWorker', { + sessionId, + message: JSON.stringify({ id: id++, method, params }) + }, () => console.log(`Message ${method} received the response`)); + } + + // Wait for the notification + function onMessageReceived({ params: { message } }) { + if (!message || + JSON.parse(message).method !== 'NodeRuntime.waitingForDisconnect') { + session.once('NodeWorker.receivedMessageFromWorker', onMessageReceived); + return; + } + // Force a call to node::inspector::Agent::ToggleAsyncHook by changing the + // async call stack depth + postToWorkerInspector('Debugger.setAsyncCallStackDepth', { maxDepth: 1 }); + // This is were the original crash happened + session.post('NodeWorker.detach', { sessionId }, () => { + done = true; + }); + } + + onMessageReceived({ params: { message: null } }); + // Enable the debugger, otherwise setAsyncCallStackDepth does nothing + postToWorkerInspector('Debugger.enable'); + // Start waiting for disconnect notification + postToWorkerInspector('NodeRuntime.notifyWhenWaitingForDisconnect', + { enabled: true }); + // start worker + postToWorkerInspector('Runtime.runIfWaitingForDebugger'); +}); + +session.post('NodeWorker.enable', { waitForDebuggerOnStart: true }, () => { + new Worker('console.log("Worker is done")', { eval: true }) + .once('exit', () => { + setTimeout(() => { + assert.strictEqual(done, true); + console.log('Test is done'); + }, 0); + }); +}); |