Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

inspector: move inspector async hooks to environment #39112

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,8 @@ constexpr size_t kFsStatsBufferLength =
V(internal_binding_loader, v8::Function) \
V(immediate_callback_function, v8::Function) \
V(inspector_console_extension_installer, v8::Function) \
V(inspector_disable_async_hooks, v8::Function) \
V(inspector_enable_async_hooks, v8::Function) \
V(messaging_deserialize_create_object, v8::Function) \
V(message_port, v8::Object) \
V(native_module_require, v8::Function) \
Expand Down
22 changes: 12 additions & 10 deletions src/inspector_agent.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ using node::FatalError;

using v8::Context;
using v8::Function;
using v8::Global;
using v8::HandleScope;
using v8::Isolate;
using v8::Local;
Expand Down Expand Up @@ -802,8 +801,8 @@ void Agent::PauseOnNextJavascriptStatement(const std::string& reason) {
void Agent::RegisterAsyncHook(Isolate* isolate,
Local<Function> enable_function,
Local<Function> disable_function) {
enable_async_hook_function_.Reset(isolate, enable_function);
disable_async_hook_function_.Reset(isolate, disable_function);
parent_env_->set_inspector_enable_async_hooks(enable_function);
parent_env_->set_inspector_disable_async_hooks(disable_function);
if (pending_enable_async_hook_) {
CHECK(!pending_disable_async_hook_);
pending_enable_async_hook_ = false;
Expand All @@ -816,8 +815,10 @@ void Agent::RegisterAsyncHook(Isolate* isolate,
}

void Agent::EnableAsyncHook() {
if (!enable_async_hook_function_.IsEmpty()) {
ToggleAsyncHook(parent_env_->isolate(), enable_async_hook_function_);
HandleScope scope(parent_env_->isolate());
Local<Function> enable = parent_env_->inspector_enable_async_hooks();
if (!enable.IsEmpty()) {
ToggleAsyncHook(parent_env_->isolate(), enable);
} else if (pending_disable_async_hook_) {
CHECK(!pending_enable_async_hook_);
pending_disable_async_hook_ = false;
Expand All @@ -827,8 +828,10 @@ void Agent::EnableAsyncHook() {
}

void Agent::DisableAsyncHook() {
if (!disable_async_hook_function_.IsEmpty()) {
ToggleAsyncHook(parent_env_->isolate(), disable_async_hook_function_);
HandleScope scope(parent_env_->isolate());
Local<Function> disable = parent_env_->inspector_enable_async_hooks();
if (!disable.IsEmpty()) {
ToggleAsyncHook(parent_env_->isolate(), disable);
} else if (pending_enable_async_hook_) {
CHECK(!pending_disable_async_hook_);
pending_enable_async_hook_ = false;
Expand All @@ -837,8 +840,7 @@ void Agent::DisableAsyncHook() {
}
}

void Agent::ToggleAsyncHook(Isolate* isolate,
const Global<Function>& fn) {
void Agent::ToggleAsyncHook(Isolate* isolate, const Local<Function>& fn) {
joyeecheung marked this conversation as resolved.
Show resolved Hide resolved
// Guard against running this during cleanup -- no async events will be
// emitted anyway at that point anymore, and calling into JS is not possible.
// This should probably not be something we're attempting in the first place,
Expand All @@ -849,7 +851,7 @@ void Agent::ToggleAsyncHook(Isolate* isolate,
CHECK(!fn.IsEmpty());
auto context = parent_env_->context();
v8::TryCatch try_catch(isolate);
USE(fn.Get(isolate)->Call(context, Undefined(isolate), 0, nullptr));
USE(fn->Call(context, Undefined(isolate), 0, nullptr));
if (try_catch.HasCaught() && !try_catch.HasTerminated()) {
PrintCaughtException(isolate, context, try_catch);
FatalError("\nnode::inspector::Agent::ToggleAsyncHook",
Expand Down
5 changes: 1 addition & 4 deletions src/inspector_agent.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@ class Agent {
inline Environment* env() const { return parent_env_; }

private:
void ToggleAsyncHook(v8::Isolate* isolate,
const v8::Global<v8::Function>& fn);
void ToggleAsyncHook(v8::Isolate* isolate, const v8::Local<v8::Function>& fn);
joyeecheung marked this conversation as resolved.
Show resolved Hide resolved

node::Environment* parent_env_;
// Encapsulates majority of the Inspector functionality
Expand All @@ -137,8 +136,6 @@ class Agent {

bool pending_enable_async_hook_ = false;
bool pending_disable_async_hook_ = false;
v8::Global<v8::Function> enable_async_hook_function_;
v8::Global<v8::Function> disable_async_hook_function_;
};

} // namespace inspector
Expand Down