Skip to content

Commit cecdf7c

Browse files
sam-githubaddaleax
authored andcommitted
src: use a std::vector for preload_modules
A dynamically allocated array was being used, simplify the memory management by using std::vector. PR-URL: #12241 Reviewed-By: Richard Lau <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
1 parent 2555780 commit cecdf7c

File tree

1 file changed

+6
-22
lines changed

1 file changed

+6
-22
lines changed

src/node.cc

+6-22
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ static bool throw_deprecation = false;
162162
static bool trace_sync_io = false;
163163
static bool track_heap_objects = false;
164164
static const char* eval_string = nullptr;
165-
static unsigned int preload_module_count = 0;
166-
static const char** preload_modules = nullptr;
165+
static std::vector<std::string> preload_modules;
167166
static const int v8_default_thread_pool_size = 4;
168167
static int v8_thread_pool_size = v8_default_thread_pool_size;
169168
static bool prof_process = false;
@@ -3277,21 +3276,18 @@ void SetupProcessObject(Environment* env,
32773276
READONLY_PROPERTY(process, "_forceRepl", True(env->isolate()));
32783277
}
32793278

3280-
if (preload_module_count) {
3281-
CHECK(preload_modules);
3279+
if (!preload_modules.empty()) {
32823280
Local<Array> array = Array::New(env->isolate());
3283-
for (unsigned int i = 0; i < preload_module_count; ++i) {
3281+
for (unsigned int i = 0; i < preload_modules.size(); ++i) {
32843282
Local<String> module = String::NewFromUtf8(env->isolate(),
3285-
preload_modules[i]);
3283+
preload_modules[i].c_str());
32863284
array->Set(i, module);
32873285
}
32883286
READONLY_PROPERTY(process,
32893287
"_preload_modules",
32903288
array);
32913289

3292-
delete[] preload_modules;
3293-
preload_modules = nullptr;
3294-
preload_module_count = 0;
3290+
preload_modules.clear();
32953291
}
32963292

32973293
// --no-deprecation
@@ -3649,15 +3645,13 @@ static void ParseArgs(int* argc,
36493645
const char** new_exec_argv = new const char*[nargs];
36503646
const char** new_v8_argv = new const char*[nargs];
36513647
const char** new_argv = new const char*[nargs];
3652-
const char** local_preload_modules = new const char*[nargs];
36533648
bool use_bundled_ca = false;
36543649
bool use_openssl_ca = false;
36553650

36563651
for (unsigned int i = 0; i < nargs; ++i) {
36573652
new_exec_argv[i] = nullptr;
36583653
new_v8_argv[i] = nullptr;
36593654
new_argv[i] = nullptr;
3660-
local_preload_modules[i] = nullptr;
36613655
}
36623656

36633657
// exec_argv starts with the first option, the other two start with argv[0].
@@ -3715,7 +3709,7 @@ static void ParseArgs(int* argc,
37153709
exit(9);
37163710
}
37173711
args_consumed += 1;
3718-
local_preload_modules[preload_module_count++] = module;
3712+
preload_modules.push_back(module);
37193713
} else if (strcmp(arg, "--check") == 0 || strcmp(arg, "-c") == 0) {
37203714
syntax_check_only = true;
37213715
} else if (strcmp(arg, "--interactive") == 0 || strcmp(arg, "-i") == 0) {
@@ -3835,16 +3829,6 @@ static void ParseArgs(int* argc,
38353829
memcpy(argv, new_argv, new_argc * sizeof(*argv));
38363830
delete[] new_argv;
38373831
*argc = static_cast<int>(new_argc);
3838-
3839-
// Copy the preload_modules from the local array to an appropriately sized
3840-
// global array.
3841-
if (preload_module_count > 0) {
3842-
CHECK(!preload_modules);
3843-
preload_modules = new const char*[preload_module_count];
3844-
memcpy(preload_modules, local_preload_modules,
3845-
preload_module_count * sizeof(*preload_modules));
3846-
}
3847-
delete[] local_preload_modules;
38483832
}
38493833

38503834

0 commit comments

Comments
 (0)