Skip to content

Commit 8680bb9

Browse files
yhwanggibfahn
authored andcommitted
src: explicitly register built-in modules
Previously, built-in modules are registered before main() via __attribute__((constructor)) mechanism in GCC and similiar mechanism in MSVC. This causes some issues when node is built as static library. Calling module registration function for built-in modules in node::Init() helps to avoid the issues. Signed-off-by: Yihong Wang <[email protected]> PR-URL: #16565 Refs: #14986 (comment) Reviewed-By: Gireesh Punathil <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
1 parent 21a7459 commit 8680bb9

35 files changed

+167
-35
lines changed

β€Žnode.gypβ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,7 @@
808808
'defines': [ 'NODE_WANT_INTERNALS=1' ],
809809

810810
'sources': [
811+
'test/cctest/node_module_reg.cc',
811812
'test/cctest/node_test_fixture.cc',
812813
'test/cctest/test_aliased_buffer.cc',
813814
'test/cctest/test_base64.cc',

β€Žsrc/async-wrap.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,4 +719,4 @@ void EmitAsyncDestroy(Isolate* isolate, async_context asyncContext) {
719719

720720
} // namespace node
721721

722-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::AsyncWrap::Initialize)
722+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(async_wrap, node::AsyncWrap::Initialize)

β€Žsrc/cares_wrap.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2265,4 +2265,4 @@ void Initialize(Local<Object> target,
22652265
} // namespace cares_wrap
22662266
} // namespace node
22672267

2268-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(cares_wrap, node::cares_wrap::Initialize)
2268+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(cares_wrap, node::cares_wrap::Initialize)

β€Žsrc/fs_event_wrap.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,4 @@ void FSEventWrap::Close(const FunctionCallbackInfo<Value>& args) {
221221
} // anonymous namespace
222222
} // namespace node
223223

224-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(fs_event_wrap, node::FSEventWrap::Initialize)
224+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(fs_event_wrap, node::FSEventWrap::Initialize)

β€Žsrc/inspector_js_api.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,5 +348,5 @@ void InitInspectorBindings(Local<Object> target, Local<Value> unused,
348348
} // namespace inspector
349349
} // namespace node
350350

351-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector,
351+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(inspector,
352352
node::inspector::InitInspectorBindings);

β€Žsrc/js_stream.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,4 @@ void JSStream::Initialize(Local<Object> target,
251251

252252
} // namespace node
253253

254-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(js_stream, node::JSStream::Initialize)
254+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(js_stream, node::JSStream::Initialize)

β€Žsrc/node.ccβ€Ž

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@ typedef int mode_t;
124124
extern char **environ;
125125
#endif
126126

127+
// This is used to load built-in modules. Instead of using
128+
// __attribute__((constructor)), we call the _register_<modname>
129+
// function for each built-in modules explicitly in
130+
// node::RegisterBuiltinModules(). This is only forward declaration.
131+
// The definitions are in each module's implementation when calling
132+
// the NODE_BUILTIN_MODULE_CONTEXT_AWARE.
133+
#define V(modname) void _register_##modname();
134+
NODE_BUILTIN_MODULES(V)
135+
#undef V
136+
127137
namespace node {
128138

129139
using v8::Array;
@@ -4305,6 +4315,9 @@ void Init(int* argc,
43054315
// Initialize prog_start_time to get relative uptime.
43064316
prog_start_time = static_cast<double>(uv_now(uv_default_loop()));
43074317

4318+
// Register built-in modules
4319+
node::RegisterBuiltinModules();
4320+
43084321
// Make inherited handles noninheritable.
43094322
uv_disable_stdio_inheritance();
43104323

@@ -4694,11 +4707,18 @@ int Start(int argc, char** argv) {
46944707
return exit_code;
46954708
}
46964709

4710+
// Call built-in modules' _register_<module name> function to
4711+
// do module registration explicitly.
4712+
void RegisterBuiltinModules() {
4713+
#define V(modname) _register_##modname();
4714+
NODE_BUILTIN_MODULES(V)
4715+
#undef V
4716+
}
46974717

46984718
} // namespace node
46994719

47004720
#if !HAVE_INSPECTOR
4701-
static void InitEmptyBindings() {}
4721+
void InitEmptyBindings() {}
47024722

4703-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, InitEmptyBindings)
4723+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(inspector, InitEmptyBindings)
47044724
#endif // !HAVE_INSPECTOR

β€Žsrc/node_buffer.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1300,4 +1300,4 @@ void Initialize(Local<Object> target,
13001300
} // namespace Buffer
13011301
} // namespace node
13021302

1303-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(buffer, node::Buffer::Initialize)
1303+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(buffer, node::Buffer::Initialize)

β€Žsrc/node_config.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,4 @@ static void InitConfig(Local<Object> target,
132132

133133
} // namespace node
134134

135-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(config, node::InitConfig)
135+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(config, node::InitConfig)

β€Žsrc/node_contextify.ccβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1171,4 +1171,4 @@ void InitContextify(Local<Object> target,
11711171
} // anonymous namespace
11721172
} // namespace node
11731173

1174-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(contextify, node::InitContextify)
1174+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(contextify, node::InitContextify)

0 commit comments

Comments
Β (0)