Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/api/environment.cc
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ Environment* CreateEnvironment(IsolateData* isolate_data,
static_cast<Environment::Flags>(Environment::kIsMainThread |
Environment::kOwnsProcessState |
Environment::kOwnsInspector));
env->Start(per_process::v8_is_profiling);
env->InitializeLibuv(per_process::v8_is_profiling);
env->ProcessCliArgs(args, exec_args);
return env;
}
Expand Down
2 changes: 1 addition & 1 deletion src/env.cc
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ Environment::~Environment() {
}
}

void Environment::Start(bool start_profiler_idle_notifier) {
void Environment::InitializeLibuv(bool start_profiler_idle_notifier) {
HandleScope handle_scope(isolate());
Context::Scope context_scope(context());

Expand Down
2 changes: 1 addition & 1 deletion src/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ class Environment {
uint64_t thread_id = kNoThreadId);
~Environment();

void Start(bool start_profiler_idle_notifier);
void InitializeLibuv(bool start_profiler_idle_notifier);
v8::MaybeLocal<v8::Object> ProcessCliArgs(
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args);
Expand Down
51 changes: 26 additions & 25 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -620,10 +620,10 @@ int ProcessGlobalArgs(std::vector<std::string>* args,

static std::atomic_bool init_called{false};

int Init(std::vector<std::string>* argv,
std::vector<std::string>* exec_argv,
std::vector<std::string>* errors) {
// Make sure Init() is called only once.
int InitializeNodeWithArgs(std::vector<std::string>* argv,
std::vector<std::string>* exec_argv,
std::vector<std::string>* errors) {
// Make sure InitializeNodeWithArgs() is called only once.
CHECK(!init_called.exchange(true));

// Register built-in modules
Expand Down Expand Up @@ -734,7 +734,7 @@ void Init(int* argc,

// This (approximately) duplicates some logic that has been moved to
// node::Start(), with the difference that here we explicitly call `exit()`.
int exit_code = Init(&argv_, &exec_argv_, &errors);
int exit_code = InitializeNodeWithArgs(&argv_, &exec_argv_, &errors);

for (const std::string& error : errors)
fprintf(stderr, "%s: %s\n", argv_.at(0).c_str(), error.c_str());
Expand Down Expand Up @@ -769,9 +769,10 @@ void RunBeforeExit(Environment* env) {
EmitBeforeExit(env);
}

inline int Start(Isolate* isolate, IsolateData* isolate_data,
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args) {
inline int StartNodeWithIsolate(Isolate* isolate,
IsolateData* isolate_data,
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args) {
HandleScope handle_scope(isolate);
Local<Context> context = NewContext(isolate);
Context::Scope context_scope(context);
Expand All @@ -782,7 +783,7 @@ inline int Start(Isolate* isolate, IsolateData* isolate_data,
static_cast<Environment::Flags>(Environment::kIsMainThread |
Environment::kOwnsProcessState |
Environment::kOwnsInspector));
env.Start(per_process::v8_is_profiling);
env.InitializeLibuv(per_process::v8_is_profiling);
env.ProcessCliArgs(args, exec_args);

#if HAVE_INSPECTOR && NODE_USE_V8_PLATFORM
Expand Down Expand Up @@ -858,25 +859,15 @@ inline int Start(Isolate* isolate, IsolateData* isolate_data,
return exit_code;
}

inline int Start(uv_loop_t* event_loop,
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args) {
inline int StartNodeWithLoopAndArgs(uv_loop_t* event_loop,
const std::vector<std::string>& args,
const std::vector<std::string>& exec_args) {
std::unique_ptr<ArrayBufferAllocator, decltype(&FreeArrayBufferAllocator)>
allocator(CreateArrayBufferAllocator(), &FreeArrayBufferAllocator);
Isolate* const isolate = NewIsolate(allocator.get(), event_loop);
if (isolate == nullptr)
return 12; // Signal internal error.

if (per_process::cli_options->print_version) {
printf("%s\n", NODE_VERSION);
return 0;
}

if (per_process::cli_options->print_v8_help) {
V8::SetFlagsFromString("--help", 6); // Doesn't return.
UNREACHABLE();
}

int exit_code;
{
Locker locker(isolate);
Expand All @@ -894,7 +885,7 @@ inline int Start(uv_loop_t* event_loop,
isolate->GetHeapProfiler()->StartTrackingHeapObjects(true);
}
exit_code =
Start(isolate, isolate_data.get(), args, exec_args);
StartNodeWithIsolate(isolate, isolate_data.get(), args, exec_args);
}

isolate->Dispose();
Expand Down Expand Up @@ -926,12 +917,22 @@ int Start(int argc, char** argv) {
std::vector<std::string> errors;
// This needs to run *before* V8::Initialize().
{
const int exit_code = Init(&args, &exec_args, &errors);
const int exit_code = InitializeNodeWithArgs(&args, &exec_args, &errors);
for (const std::string& error : errors)
fprintf(stderr, "%s: %s\n", args.at(0).c_str(), error.c_str());
if (exit_code != 0) return exit_code;
}

if (per_process::cli_options->print_version) {
printf("%s\n", NODE_VERSION);
return 0;
}

if (per_process::cli_options->print_v8_help) {
V8::SetFlagsFromString("--help", 6); // Doesn't return.
UNREACHABLE();
}

#if HAVE_OPENSSL
{
std::string extra_ca_certs;
Expand All @@ -953,7 +954,7 @@ int Start(int argc, char** argv) {
performance::performance_v8_start = PERFORMANCE_NOW();
per_process::v8_initialized = true;
const int exit_code =
Start(uv_default_loop(), args, exec_args);
StartNodeWithLoopAndArgs(uv_default_loop(), args, exec_args);
per_process::v8_initialized = false;
V8::Dispose();

Expand Down
2 changes: 1 addition & 1 deletion src/node_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ void Worker::Run() {
env_->set_abort_on_uncaught_exception(false);
env_->set_worker_context(this);

env_->Start(profiler_idle_notifier_started_);
env_->InitializeLibuv(profiler_idle_notifier_started_);
env_->ProcessCliArgs(std::vector<std::string>{},
std::move(exec_argv_));
}
Expand Down