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: nodejs#32344
  • Loading branch information
addaleax committed Mar 30, 2020
1 parent b6459ec commit 09d3469
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions src/node_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -588,16 +588,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 @@ -624,21 +615,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 09d3469

Please sign in to comment.