Skip to content

Commit d77e818

Browse files
committed
src: simplify code, remove NodeInstanceData
NodeInstanceData is not used meaningfully and makes the initialization logic harder to follow. Let's remove it and delete 100 lines of code in one fell swoop. PR-URL: nodejs#9224 Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent d52f5dc commit d77e818

2 files changed

Lines changed: 16 additions & 116 deletions

File tree

src/node.cc

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4374,10 +4374,9 @@ void FreeEnvironment(Environment* env) {
43744374
}
43754375

43764376

4377-
// Entry point for new node instances, also called directly for the main
4378-
// node instance.
4379-
static void StartNodeInstance(void* arg) {
4380-
NodeInstanceData* instance_data = static_cast<NodeInstanceData*>(arg);
4377+
inline int Start(uv_loop_t* event_loop,
4378+
int argc, const char* const* argv,
4379+
int exec_argc, const char* const* exec_argv) {
43814380
Isolate::CreateParams params;
43824381
ArrayBufferAllocator array_buffer_allocator;
43834382
params.array_buffer_allocator = &array_buffer_allocator;
@@ -4388,39 +4387,32 @@ static void StartNodeInstance(void* arg) {
43884387

43894388
{
43904389
Mutex::ScopedLock scoped_lock(node_isolate_mutex);
4391-
if (instance_data->is_main()) {
4392-
CHECK_EQ(node_isolate, nullptr);
4393-
node_isolate = isolate;
4394-
}
4390+
CHECK_EQ(node_isolate, nullptr);
4391+
node_isolate = isolate;
43954392
}
43964393

43974394
if (track_heap_objects) {
43984395
isolate->GetHeapProfiler()->StartTrackingHeapObjects(true);
43994396
}
44004397

4398+
int exit_code;
44014399
{
44024400
Locker locker(isolate);
44034401
Isolate::Scope isolate_scope(isolate);
44044402
HandleScope handle_scope(isolate);
4405-
IsolateData isolate_data(isolate, instance_data->event_loop(),
4403+
IsolateData isolate_data(isolate, event_loop,
44064404
array_buffer_allocator.zero_fill_field());
44074405
Local<Context> context = Context::New(isolate);
44084406
Context::Scope context_scope(context);
44094407
Environment env(&isolate_data, context);
4410-
env.Start(instance_data->argc(),
4411-
instance_data->argv(),
4412-
instance_data->exec_argc(),
4413-
instance_data->exec_argv(),
4414-
v8_is_profiling);
4408+
env.Start(argc, argv, exec_argc, exec_argv, v8_is_profiling);
44154409

44164410
isolate->SetAbortOnUncaughtExceptionCallback(
44174411
ShouldAbortOnUncaughtException);
44184412

44194413
// Start debug agent when argv has --debug
4420-
if (instance_data->use_debug_agent()) {
4421-
const char* path = instance_data->argc() > 1
4422-
? instance_data->argv()[1]
4423-
: nullptr;
4414+
if (use_debug_agent) {
4415+
const char* path = argc > 1 ? argv[1] : nullptr;
44244416
StartDebug(&env, path, debug_wait_connect);
44254417
if (use_inspector && !debugger_running) {
44264418
exit(12);
@@ -4435,7 +4427,7 @@ static void StartNodeInstance(void* arg) {
44354427
env.set_trace_sync_io(trace_sync_io);
44364428

44374429
// Enable debugger
4438-
if (instance_data->use_debug_agent())
4430+
if (use_debug_agent)
44394431
EnableDebug(&env);
44404432

44414433
{
@@ -4460,9 +4452,7 @@ static void StartNodeInstance(void* arg) {
44604452

44614453
env.set_trace_sync_io(false);
44624454

4463-
int exit_code = EmitExit(&env);
4464-
if (instance_data->is_main())
4465-
instance_data->set_exit_code(exit_code);
4455+
exit_code = EmitExit(&env);
44664456
RunAtExit(&env);
44674457

44684458
WaitForInspectorDisconnect(&env);
@@ -4480,6 +4470,8 @@ static void StartNodeInstance(void* arg) {
44804470
CHECK_NE(isolate, nullptr);
44814471
isolate->Dispose();
44824472
isolate = nullptr;
4473+
4474+
return exit_code;
44834475
}
44844476

44854477
int Start(int argc, char** argv) {
@@ -4510,19 +4502,8 @@ int Start(int argc, char** argv) {
45104502
v8_platform.Initialize(v8_thread_pool_size);
45114503
V8::Initialize();
45124504
v8_initialized = true;
4513-
4514-
int exit_code = 1;
4515-
{
4516-
NodeInstanceData instance_data(NodeInstanceType::MAIN,
4517-
uv_default_loop(),
4518-
argc,
4519-
const_cast<const char**>(argv),
4520-
exec_argc,
4521-
exec_argv,
4522-
use_debug_agent);
4523-
StartNodeInstance(&instance_data);
4524-
exit_code = instance_data.exit_code();
4525-
}
4505+
const int exit_code =
4506+
Start(uv_default_loop(), argc, argv, exec_argc, exec_argv);
45264507
v8_initialized = false;
45274508
V8::Dispose();
45284509

src/node_internals.h

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -179,87 +179,6 @@ class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
179179
// by clearing all callbacks that could handle the error.
180180
void ClearFatalExceptionHandlers(Environment* env);
181181

182-
enum NodeInstanceType { MAIN, WORKER, REMOTE_DEBUG_SERVER };
183-
184-
class NodeInstanceData {
185-
public:
186-
NodeInstanceData(NodeInstanceType node_instance_type,
187-
uv_loop_t* event_loop,
188-
int argc,
189-
const char** argv,
190-
int exec_argc,
191-
const char** exec_argv,
192-
bool use_debug_agent_flag)
193-
: node_instance_type_(node_instance_type),
194-
exit_code_(1),
195-
event_loop_(event_loop),
196-
argc_(argc),
197-
argv_(argv),
198-
exec_argc_(exec_argc),
199-
exec_argv_(exec_argv),
200-
use_debug_agent_flag_(use_debug_agent_flag) {
201-
CHECK_NE(event_loop_, nullptr);
202-
}
203-
204-
uv_loop_t* event_loop() const {
205-
return event_loop_;
206-
}
207-
208-
int exit_code() {
209-
CHECK(is_main());
210-
return exit_code_;
211-
}
212-
213-
void set_exit_code(int exit_code) {
214-
CHECK(is_main());
215-
exit_code_ = exit_code;
216-
}
217-
218-
bool is_main() {
219-
return node_instance_type_ == MAIN;
220-
}
221-
222-
bool is_worker() {
223-
return node_instance_type_ == WORKER;
224-
}
225-
226-
bool is_remote_debug_server() {
227-
return node_instance_type_ == REMOTE_DEBUG_SERVER;
228-
}
229-
230-
int argc() {
231-
return argc_;
232-
}
233-
234-
const char** argv() {
235-
return argv_;
236-
}
237-
238-
int exec_argc() {
239-
return exec_argc_;
240-
}
241-
242-
const char** exec_argv() {
243-
return exec_argv_;
244-
}
245-
246-
bool use_debug_agent() {
247-
return is_main() && use_debug_agent_flag_;
248-
}
249-
250-
private:
251-
const NodeInstanceType node_instance_type_;
252-
int exit_code_;
253-
uv_loop_t* const event_loop_;
254-
const int argc_;
255-
const char** argv_;
256-
const int exec_argc_;
257-
const char** exec_argv_;
258-
const bool use_debug_agent_flag_;
259-
260-
DISALLOW_COPY_AND_ASSIGN(NodeInstanceData);
261-
};
262-
263182
namespace Buffer {
264183
v8::MaybeLocal<v8::Object> Copy(Environment* env, const char* data, size_t len);
265184
v8::MaybeLocal<v8::Object> New(Environment* env, size_t size);

0 commit comments

Comments
 (0)