From c374e37cc47c6f8459f82cc629ac04f508a910e4 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 18 Jan 2017 16:41:36 -0800 Subject: [PATCH] Leak IsolateData since Environment is also leaked --- atom/browser/atom_browser_main_parts.cc | 6 +----- atom/browser/atom_browser_main_parts.h | 5 ----- atom/common/node_bindings.cc | 4 ++-- atom/common/node_bindings.h | 4 +--- atom/renderer/atom_renderer_client.cc | 5 +---- atom/renderer/atom_renderer_client.h | 5 ----- 6 files changed, 5 insertions(+), 24 deletions(-) diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index 8b1616cf22e..1507a976fdb 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -129,13 +129,9 @@ void AtomBrowserMainParts::PostEarlyInitialization() { // Support the "--debug" switch. node_debugger_.reset(new NodeDebugger(js_env_->isolate())); - isolate_data_.reset( - new node::IsolateData(js_env_->isolate(), uv_default_loop())); - // Create the global environment. node::Environment* env = - node_bindings_->CreateEnvironment(isolate_data_.get(), - js_env_->context()); + node_bindings_->CreateEnvironment(js_env_->context()); // Make sure node can get correct environment when debugging. if (node_debugger_->IsRunning()) diff --git a/atom/browser/atom_browser_main_parts.h b/atom/browser/atom_browser_main_parts.h index 071a7a898f0..0d8619f6865 100644 --- a/atom/browser/atom_browser_main_parts.h +++ b/atom/browser/atom_browser_main_parts.h @@ -15,10 +15,6 @@ class BrowserProcess; -namespace node { -class IsolateData; -} - namespace atom { class AtomBindings; @@ -86,7 +82,6 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts { std::unique_ptr node_bindings_; std::unique_ptr atom_bindings_; std::unique_ptr node_debugger_; - std::unique_ptr isolate_data_; base::Timer gc_timer_; diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 8e2cb097938..25734cb0038 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -144,7 +144,7 @@ void NodeBindings::Initialize() { } node::Environment* NodeBindings::CreateEnvironment( - node::IsolateData* isolate_data, v8::Handle context) { + v8::Handle context) { auto args = AtomCommandLine::argv(); // Feed node the path to initialization script. @@ -160,7 +160,7 @@ node::Environment* NodeBindings::CreateEnvironment( std::unique_ptr c_argv = StringVectorToArgArray(args); node::Environment* env = node::CreateEnvironment( - isolate_data, context, + new node::IsolateData(context->GetIsolate(), uv_default_loop()), context, args.size(), c_argv.get(), 0, nullptr); // Node uses the deprecated SetAutorunMicrotasks(false) mode, we should switch diff --git a/atom/common/node_bindings.h b/atom/common/node_bindings.h index 7cf31078396..4866ba25f06 100644 --- a/atom/common/node_bindings.h +++ b/atom/common/node_bindings.h @@ -16,7 +16,6 @@ class MessageLoop; namespace node { class Environment; -class IsolateData; } namespace atom { @@ -31,8 +30,7 @@ class NodeBindings { void Initialize(); // Create the environment and load node.js. - node::Environment* CreateEnvironment(node::IsolateData* isolate_data, - v8::Handle context); + node::Environment* CreateEnvironment(v8::Handle context); // Load node.js in the environment. void LoadEnvironment(node::Environment* env); diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index 7fa59c4f344..a2500cc6990 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -349,13 +349,10 @@ void AtomRendererClient::DidCreateScriptContext( if (first_time) { node_bindings_->Initialize(); node_bindings_->PrepareMessageLoop(); - isolate_data_.reset(new node::IsolateData(context->GetIsolate(), - uv_default_loop())); } // Setup node environment for each window. - node::Environment* env = - node_bindings_->CreateEnvironment(isolate_data_.get(), context); + node::Environment* env = node_bindings_->CreateEnvironment(context); // Add Electron extended APIs. atom_bindings_->BindTo(env->isolate(), env->process_object()); diff --git a/atom/renderer/atom_renderer_client.h b/atom/renderer/atom_renderer_client.h index 47d241ada53..a693262fed1 100644 --- a/atom/renderer/atom_renderer_client.h +++ b/atom/renderer/atom_renderer_client.h @@ -10,10 +10,6 @@ #include "content/public/renderer/content_renderer_client.h" -namespace node { -class IsolateData; -} - namespace atom { class AtomBindings; @@ -73,7 +69,6 @@ class AtomRendererClient : public content::ContentRendererClient { std::unique_ptr node_bindings_; std::unique_ptr atom_bindings_; std::unique_ptr preferences_manager_; - std::unique_ptr isolate_data_; bool isolated_world_; DISALLOW_COPY_AND_ASSIGN(AtomRendererClient);