diff --git a/src/inspector_js_api.cc b/src/inspector_js_api.cc index 3595536c785ed7..4f571663a6a5fb 100644 --- a/src/inspector_js_api.cc +++ b/src/inspector_js_api.cc @@ -69,6 +69,7 @@ class JSBindingsConnection : public AsyncWrap { JSBindingsConnection* connection) : env_(env), connection_(connection) { + connection_->Detach(); } void SendMessageToFrontend(const v8_inspector::StringView& message) @@ -123,10 +124,7 @@ class JSBindingsConnection : public AsyncWrap { new JSBindingsConnection(env, info.This(), callback); } - void Disconnect() { - session_.reset(); - delete this; - } + void Disconnect() { session_.reset(); } static void Disconnect(const FunctionCallbackInfo& info) { JSBindingsConnection* session; diff --git a/test/parallel/test-inspector-connect-to-main-thread.js b/test/parallel/test-inspector-connect-to-main-thread.js new file mode 100644 index 00000000000000..7254145a2733f0 --- /dev/null +++ b/test/parallel/test-inspector-connect-to-main-thread.js @@ -0,0 +1,20 @@ +'use strict'; +const common = require('../common'); + +common.skipIfInspectorDisabled(); + +const { Session } = require('inspector'); +const { Worker, isMainThread, workerData } = require('worker_threads'); + +if (!workerData) { + common.skipIfWorker(); +} + +if (isMainThread) { + new Worker(__filename, { workerData: {} }); +} else { + const session = new Session(); + session.connectToMainThread(); + // Do not crash + session.disconnect(); +}