diff options
author | Eugene Ostroukhov <eostroukhov@google.com> | 2019-07-05 18:01:56 -0700 |
---|---|---|
committer | Eugene Ostroukhov <eostroukhov@gmail.com> | 2019-07-15 12:32:08 -0700 |
commit | 7e543bb2e4711ab2c5a14d49e4465ff1fd75f232 (patch) | |
tree | 97681511abfd0ed216502e3542b9a53d79b27980 /test/parallel/test-inspector-async-hook-after-done.js | |
parent | 440a344f68656c8056f9a1195a892fa425d761ec (diff) | |
download | android-node-v8-7e543bb2e4711ab2c5a14d49e4465ff1fd75f232.tar.gz android-node-v8-7e543bb2e4711ab2c5a14d49e4465ff1fd75f232.tar.bz2 android-node-v8-7e543bb2e4711ab2c5a14d49e4465ff1fd75f232.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/parallel/test-inspector-async-hook-after-done.js')
-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); + }); +}); |