### Issue Details

* **Electron Version:** 9.0.0 (beta versions of 9.0.0 too)
* **Operating System:** Windows 10 1903
* **Last Known Working Electron version:** 7.2.4

### Repro steps
1. **require** a native module in a Renderer process (on a page)
2. call libuv function **uv_queue_work** 5 times
3. get **uv_after_work_cb** invoked 5 times
4. reload the page 
5. call libuv function **uv_queue_work** 5 times once more

### Expected Behavior
6. get **uv_after_work_cb** invoked 5 times

### Actual Behavior
6. get **uv_after_work_cb** invoked 1 or 2 times, remaining ones never get invoked by libuv

### To Reproduce
I prepared a sample project with minimal code that demonstrates the problem:
>>> https://github.com/jphw/libuv_problems

Please read the README.MD and check src/libuv_problems_module.cpp sources.

### Additional Information
**app.allowRendererProcessReuse = false;**  works as a workaround for this issue

shell/renderer/electron_renderer_client.cc
v8::Handle<v8::Context> context,
    content::RenderFrame* render_frame) {
  if (injected_frames_.erase(render_frame) == 0)
    return;
  node::Environment* env = node::Environment::GetCurrent(context);
  if (environments_.erase(env) == 0)
    return;
  gin_helper::EmitEvent(env->isolate(), env->process_object(), "exit");
  
  if (env == node_bindings_->uv_env())
    node_bindings_->set_uv_env(nullptr);
  
  
  
  
  
  auto* command_line = base::CommandLine::ForCurrentProcess();
  if (command_line->HasSwitch(switches::kNodeIntegrationInSubFrames) ||
      command_line->HasSwitch(
          switches::kDisableElectronSiteInstanceOverrides)) {
    node::FreeEnvironment(env);
    if (env == node_bindings_->uv_env())
      node::FreeIsolateData(node_bindings_->isolate_data());
  }
  
  electron_bindings_->EnvironmentDestroyed(env);
}
bool ElectronRendererClient::ShouldFork(blink::WebLocalFrame* frame,