Skip to content

Commit e71beba

Browse files
yhwangMylesBorins
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]> Backport-PR-URL: #18179 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 439112a commit e71beba

35 files changed

+167
-37
lines changed

node.gyp

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

800800
'sources': [
801+
'test/cctest/node_module_reg.cc',
801802
'test/cctest/node_test_fixture.cc',
802803
'test/cctest/test_aliased_buffer.cc',
803804
'test/cctest/test_base64.cc',

src/async-wrap.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,8 +729,7 @@ void EmitAsyncDestroy(Isolate* isolate, async_context asyncContext) {
729729

730730
} // namespace node
731731

732-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::AsyncWrap::Initialize)
733-
732+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(async_wrap, node::AsyncWrap::Initialize)
734733

735734
// Only legacy public API below this line.
736735

src/cares_wrap.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2241,4 +2241,4 @@ void Initialize(Local<Object> target,
22412241
} // namespace cares_wrap
22422242
} // namespace node
22432243

2244-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(cares_wrap, node::cares_wrap::Initialize)
2244+
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
@@ -222,4 +222,4 @@ void FSEventWrap::Close(const FunctionCallbackInfo<Value>& args) {
222222
} // anonymous namespace
223223
} // namespace node
224224

225-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(fs_event_wrap, node::FSEventWrap::Initialize)
225+
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
@@ -120,6 +120,16 @@ typedef int mode_t;
120120
extern char **environ;
121121
#endif
122122

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

125135
using v8::Array;
@@ -4572,6 +4582,9 @@ void Init(int* argc,
45724582
// Initialize prog_start_time to get relative uptime.
45734583
prog_start_time = static_cast<double>(uv_now(uv_default_loop()));
45744584

4585+
// Register built-in modules
4586+
node::RegisterBuiltinModules();
4587+
45754588
// Make inherited handles noninheritable.
45764589
uv_disable_stdio_inheritance();
45774590

@@ -4947,11 +4960,18 @@ int Start(int argc, char** argv) {
49474960
return exit_code;
49484961
}
49494962

4963+
// Call built-in modules' _register_<module name> function to
4964+
// do module registration explicitly.
4965+
void RegisterBuiltinModules() {
4966+
#define V(modname) _register_##modname();
4967+
NODE_BUILTIN_MODULES(V)
4968+
#undef V
4969+
}
49504970

49514971
} // namespace node
49524972

49534973
#if !HAVE_INSPECTOR
4954-
static void InitEmptyBindings() {}
4974+
void InitEmptyBindings() {}
49554975

4956-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, InitEmptyBindings)
4976+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(inspector, InitEmptyBindings)
49574977
#endif // !HAVE_INSPECTOR

src/node_buffer.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,4 +1304,4 @@ void Initialize(Local<Object> target,
13041304
} // namespace Buffer
13051305
} // namespace node
13061306

1307-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(buffer, node::Buffer::Initialize)
1307+
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
@@ -129,4 +129,4 @@ static void InitConfig(Local<Object> target,
129129

130130
} // namespace node
131131

132-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(config, node::InitConfig)
132+
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
@@ -1085,4 +1085,4 @@ void InitContextify(Local<Object> target,
10851085
} // anonymous namespace
10861086
} // namespace node
10871087

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

0 commit comments

Comments
 (0)