Skip to content

Commit 9c7a42a

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]> Refs: #14986 (comment) Backport-PR-URL: #17625 PR-URL: #16565 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 47cd49a commit 9c7a42a

35 files changed

+167
-35
lines changed

node.gyp

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

817817
'sources': [
818+
'test/cctest/node_module_reg.cc',
818819
'test/cctest/node_test_fixture.cc',
819820
'test/cctest/test_aliased_buffer.cc',
820821
'test/cctest/test_base64.cc',

src/async_wrap.cc

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

832832
} // namespace node
833833

834-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::AsyncWrap::Initialize)
834+
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
@@ -2259,4 +2259,4 @@ void Initialize(Local<Object> target,
22592259
} // namespace cares_wrap
22602260
} // namespace node
22612261

2262-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(cares_wrap, node::cares_wrap::Initialize)
2262+
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
@@ -123,6 +123,16 @@ typedef int mode_t;
123123
extern char **environ;
124124
#endif
125125

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

128138
using v8::Array;
@@ -4575,6 +4585,9 @@ void Init(int* argc,
45754585
// Initialize prog_start_time to get relative uptime.
45764586
prog_start_time = static_cast<double>(uv_now(uv_default_loop()));
45774587

4588+
// Register built-in modules
4589+
node::RegisterBuiltinModules();
4590+
45784591
// Make inherited handles noninheritable.
45794592
uv_disable_stdio_inheritance();
45804593

@@ -4984,11 +4997,18 @@ int Start(int argc, char** argv) {
49844997
return exit_code;
49854998
}
49864999

5000+
// Call built-in modules' _register_<module name> function to
5001+
// do module registration explicitly.
5002+
void RegisterBuiltinModules() {
5003+
#define V(modname) _register_##modname();
5004+
NODE_BUILTIN_MODULES(V)
5005+
#undef V
5006+
}
49875007

49885008
} // namespace node
49895009

49905010
#if !HAVE_INSPECTOR
4991-
static void InitEmptyBindings() {}
5011+
void InitEmptyBindings() {}
49925012

4993-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, InitEmptyBindings)
5013+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(inspector, InitEmptyBindings)
49945014
#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
@@ -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)