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,