Skip to content

Commit

Permalink
src: clean up worker thread creation code
Browse files Browse the repository at this point in the history
Instead of setting and then in the case of error un-setting properties,
only set them when no error occurs.

Refs: #32344

PR-URL: #32562
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
addaleax authored and targos committed Apr 28, 2020
1 parent 4b96fc5 commit 9f6ed72
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions src/node_worker.cc
Expand Up @@ -611,16 +611,7 @@ void Worker::StartThread(const FunctionCallbackInfo<Value>& args) {
ASSIGN_OR_RETURN_UNWRAP(&w, args.This());
Mutex::ScopedLock lock(w->mutex_);

// The object now owns the created thread and should not be garbage collected
// until that finishes.
w->ClearWeak();

w->env()->add_sub_worker_context(w);
w->stopped_ = false;
w->thread_joined_ = false;

if (w->has_ref_)
w->env()->add_refs(1);

uv_thread_options_t thread_options;
thread_options.flags = UV_THREAD_HAS_STACK_SIZE;
Expand All @@ -647,21 +638,27 @@ void Worker::StartThread(const FunctionCallbackInfo<Value>& args) {
// implicitly delete w
});
}, static_cast<void*>(w));
if (ret != 0) {

if (ret == 0) {
// The object now owns the created thread and should not be garbage
// collected until that finishes.
w->ClearWeak();
w->thread_joined_ = false;

if (w->has_ref_)
w->env()->add_refs(1);

w->env()->add_sub_worker_context(w);
} else {
w->stopped_ = true;

char err_buf[128];
uv_err_name_r(ret, err_buf, sizeof(err_buf));
w->custom_error_ = "ERR_WORKER_INIT_FAILED";
w->custom_error_str_ = err_buf;
w->loop_init_failed_ = true;
w->thread_joined_ = true;
w->stopped_ = true;
w->env()->remove_sub_worker_context(w);
{
Isolate* isolate = w->env()->isolate();
HandleScope handle_scope(isolate);
THROW_ERR_WORKER_INIT_FAILED(isolate, err_buf);
}
w->MakeWeak();
}
}

Expand Down

0 comments on commit 9f6ed72

Please sign in to comment.