diff --git a/atom/common/api/atom_bindings.cc b/atom/common/api/atom_bindings.cc index b747fabe9de..f1b56c67593 100644 --- a/atom/common/api/atom_bindings.cc +++ b/atom/common/api/atom_bindings.cc @@ -118,6 +118,13 @@ void AtomBindings::BindTo(v8::Isolate* isolate, } } +void AtomBindings::EnvironmentDestroyed(node::Environment* env) { + auto it = std::find(pending_next_ticks_.begin(), pending_next_ticks_.end(), + env); + if (it != pending_next_ticks_.end()) + pending_next_ticks_.erase(it); +} + void AtomBindings::ActivateUVLoop(v8::Isolate* isolate) { node::Environment* env = node::Environment::GetCurrent(isolate); if (std::find(pending_next_ticks_.begin(), pending_next_ticks_.end(), env) != diff --git a/atom/common/api/atom_bindings.h b/atom/common/api/atom_bindings.h index 58c2336c0e8..3fd43cc8a14 100644 --- a/atom/common/api/atom_bindings.h +++ b/atom/common/api/atom_bindings.h @@ -27,6 +27,9 @@ class AtomBindings { // load native code from Electron instead. void BindTo(v8::Isolate* isolate, v8::Local<v8::Object> process); + // Should be called when a node::Environment has been destroyed. + void EnvironmentDestroyed(node::Environment* env); + static void Log(const base::string16& message); static void Crash(); diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index 318a9d38cdb..79aea0ee0b5 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -384,6 +384,7 @@ void AtomRendererClient::WillReleaseScriptContext( // Destroy the node environment. node::FreeEnvironment(env); + atom_bindings_->EnvironmentDestroyed(env); } bool AtomRendererClient::ShouldFork(blink::WebLocalFrame* frame,