src: use uint32_t for process initialization flags enum

Refs: https://github.com/nodejs/node/pull/45221
PR-URL: https://github.com/nodejs/node/pull/46427
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
Anna Henningsen 2023-02-02 18:35:23 +01:00 committed by GitHub
parent 1579ff4f95
commit f84de0ad4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 8 deletions

View File

@ -431,7 +431,13 @@ void ResetSignalHandlers() {
#endif // __POSIX__ #endif // __POSIX__
} }
// We use uint32_t since that can be accessed as a lock-free atomic
// variable on all platforms that we support, which we require in
// order for its value to be usable inside signal handlers.
static std::atomic<uint32_t> init_process_flags = 0; static std::atomic<uint32_t> init_process_flags = 0;
static_assert(
std::is_same_v<std::underlying_type_t<ProcessInitializationFlags::Flags>,
uint32_t>);
static void PlatformInit(ProcessInitializationFlags::Flags flags) { static void PlatformInit(ProcessInitializationFlags::Flags flags) {
// init_process_flags is accessed in ResetStdio(), // init_process_flags is accessed in ResetStdio(),
@ -1057,7 +1063,7 @@ std::unique_ptr<InitializationResult> InitializeOncePerProcess(
} }
void TearDownOncePerProcess() { void TearDownOncePerProcess() {
const uint64_t flags = init_process_flags.load(); const uint32_t flags = init_process_flags.load();
ResetStdio(); ResetStdio();
if (!(flags & ProcessInitializationFlags::kNoDefaultSignalHandling)) { if (!(flags & ProcessInitializationFlags::kNoDefaultSignalHandling)) {
ResetSignalHandlers(); ResetSignalHandlers();

View File

@ -227,10 +227,8 @@ class Environment;
class MultiIsolatePlatform; class MultiIsolatePlatform;
class InitializationResultImpl; class InitializationResultImpl;
namespace ProcessFlags { namespace ProcessInitializationFlags {
// TODO(addaleax): Switch to uint32_t to match std::atomic<uint32_t> enum Flags : uint32_t {
// init_process_flags in node.cc
enum Flags : uint64_t {
kNoFlags = 0, kNoFlags = 0,
// Enable stdio inheritance, which is disabled by default. // Enable stdio inheritance, which is disabled by default.
// This flag is also implied by kNoStdioInitialization. // This flag is also implied by kNoStdioInitialization.
@ -270,9 +268,8 @@ enum Flags : uint64_t {
kNoParseGlobalDebugVariables | kNoAdjustResourceLimits | kNoParseGlobalDebugVariables | kNoAdjustResourceLimits |
kNoUseLargePages | kNoPrintHelpOrVersionOutput, kNoUseLargePages | kNoPrintHelpOrVersionOutput,
}; };
} // namespace ProcessFlags } // namespace ProcessInitializationFlags
// TODO(addaleax): Make this the canonical name, as it is more descriptive. namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
namespace ProcessInitializationFlags = ProcessFlags;
class NODE_EXTERN InitializationResult { class NODE_EXTERN InitializationResult {
public: public: