Skip to content

Commit d979e2e

Browse files
committed
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]> Original PR-URL: nodejs#16565 Refs: nodejs#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 acf6f24 commit d979e2e

35 files changed

+167
-35
lines changed

node.gyp

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

818818
'sources': [
819+
'test/cctest/node_module_reg.cc',
819820
'test/cctest/node_test_fixture.cc',
820821
'test/cctest/test_aliased_buffer.cc',
821822
'test/cctest/test_base64.cc',

src/async-wrap.cc

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

829829
} // namespace node
830830

831-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::AsyncWrap::Initialize)
831+
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;
@@ -4639,6 +4649,9 @@ void Init(int* argc,
46394649
// Initialize prog_start_time to get relative uptime.
46404650
prog_start_time = static_cast<double>(uv_now(uv_default_loop()));
46414651

4652+
// Register built-in modules
4653+
node::RegisterBuiltinModules();
4654+
46424655
// Make inherited handles noninheritable.
46434656
uv_disable_stdio_inheritance();
46444657

@@ -5028,11 +5041,18 @@ int Start(int argc, char** argv) {
50285041
return exit_code;
50295042
}
50305043

5044+
// Call built-in modules' _register_<module name> function to
5045+
// do module registration explicitly.
5046+
void RegisterBuiltinModules() {
5047+
#define V(modname) _register_##modname();
5048+
NODE_BUILTIN_MODULES(V)
5049+
#undef V
5050+
}
50315051

50325052
} // namespace node
50335053

50345054
#if !HAVE_INSPECTOR
5035-
static void InitEmptyBindings() {}
5055+
void InitEmptyBindings() {}
50365056

5037-
NODE_MODULE_CONTEXT_AWARE_BUILTIN(inspector, InitEmptyBindings)
5057+
NODE_BUILTIN_MODULE_CONTEXT_AWARE(inspector, InitEmptyBindings)
50385058
#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)