Skip to content

Commit f84de0a

Browse files
authored
src: use uint32_t for process initialization flags enum
Refs: #45221 PR-URL: #46427 Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent 1579ff4 commit f84de0a

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/node.cc

+7-1
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,13 @@ void ResetSignalHandlers() {
431431
#endif // __POSIX__
432432
}
433433

434+
// We use uint32_t since that can be accessed as a lock-free atomic
435+
// variable on all platforms that we support, which we require in
436+
// order for its value to be usable inside signal handlers.
434437
static std::atomic<uint32_t> init_process_flags = 0;
438+
static_assert(
439+
std::is_same_v<std::underlying_type_t<ProcessInitializationFlags::Flags>,
440+
uint32_t>);
435441

436442
static void PlatformInit(ProcessInitializationFlags::Flags flags) {
437443
// init_process_flags is accessed in ResetStdio(),
@@ -1057,7 +1063,7 @@ std::unique_ptr<InitializationResult> InitializeOncePerProcess(
10571063
}
10581064

10591065
void TearDownOncePerProcess() {
1060-
const uint64_t flags = init_process_flags.load();
1066+
const uint32_t flags = init_process_flags.load();
10611067
ResetStdio();
10621068
if (!(flags & ProcessInitializationFlags::kNoDefaultSignalHandling)) {
10631069
ResetSignalHandlers();

src/node.h

+4-7
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,8 @@ class Environment;
227227
class MultiIsolatePlatform;
228228
class InitializationResultImpl;
229229

230-
namespace ProcessFlags {
231-
// TODO(addaleax): Switch to uint32_t to match std::atomic<uint32_t>
232-
// init_process_flags in node.cc
233-
enum Flags : uint64_t {
230+
namespace ProcessInitializationFlags {
231+
enum Flags : uint32_t {
234232
kNoFlags = 0,
235233
// Enable stdio inheritance, which is disabled by default.
236234
// This flag is also implied by kNoStdioInitialization.
@@ -270,9 +268,8 @@ enum Flags : uint64_t {
270268
kNoParseGlobalDebugVariables | kNoAdjustResourceLimits |
271269
kNoUseLargePages | kNoPrintHelpOrVersionOutput,
272270
};
273-
} // namespace ProcessFlags
274-
// TODO(addaleax): Make this the canonical name, as it is more descriptive.
275-
namespace ProcessInitializationFlags = ProcessFlags;
271+
} // namespace ProcessInitializationFlags
272+
namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
276273

277274
class NODE_EXTERN InitializationResult {
278275
public:

0 commit comments

Comments
 (0)