Create new uv loop in each worker
authorCheng Zhao <zcbenz@gmail.com>
Fri, 10 Mar 2017 06:22:25 +0000 (15:22 +0900)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 20 Mar 2017 19:52:46 +0000 (12:52 -0700)
atom/common/node_bindings.cc
atom/renderer/web_worker_observer.cc

index e6dcb4e..7c13423 100644 (file)
@@ -98,7 +98,7 @@ base::FilePath GetResourcesPath(bool is_browser) {
 
 NodeBindings::NodeBindings(BrowserEnvironment browser_env)
     : browser_env_(browser_env),
-      uv_loop_(uv_default_loop()),
+      uv_loop_(browser_env == WORKER ? uv_loop_new() : uv_default_loop()),
       embed_closed_(false),
       uv_env_(nullptr),
       weak_factory_(this) {
@@ -169,7 +169,7 @@ node::Environment* NodeBindings::CreateEnvironment(
 
   std::unique_ptr<const char*[]> c_argv = StringVectorToArgArray(args);
   node::Environment* env = node::CreateEnvironment(
-      new node::IsolateData(context->GetIsolate(), uv_default_loop()), context,
+      new node::IsolateData(context->GetIsolate(), uv_loop_), context,
       args.size(), c_argv.get(), 0, nullptr);
 
   if (browser_env_ == BROWSER) {
index a6296f9..65ca81c 100644 (file)
@@ -40,7 +40,7 @@ WebWorkerObserver::~WebWorkerObserver() {
 void WebWorkerObserver::ContextCreated(v8::Local<v8::Context> context) {
   v8::Context::Scope context_scope(context);
 
-  node_bindings_->Initialize();
+  // Start the embed thread.
   node_bindings_->PrepareMessageLoop();
 
   // Setup node environment for each window.