Skip to content

Commit 204ca1e

Browse files
committed
fixup: use inlined typed array
Signed-off-by: Daeyeon Jeong <[email protected]>
1 parent 13ef5a2 commit 204ca1e

File tree

9 files changed

+36
-161
lines changed

9 files changed

+36
-161
lines changed

lib/internal/bootstrap/node.js

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ const {
8080
validateInteger,
8181
} = require('internal/validators');
8282
const {
83-
exiting_aliased_Uint32Array,
8483
exit_info_private_symbol,
8584
getHiddenValue,
8685
} = internalBinding('util');
@@ -91,31 +90,28 @@ setupGlobalProxy();
9190
setupBuffer();
9291

9392
process.domain = null;
93+
94+
// process._exiting and process.exitCode
9495
{
95-
const exitingAliasedUint32Array =
96-
getHiddenValue(process, exiting_aliased_Uint32Array);
96+
// Must match `Environment::ExitInfoFields` in `src/env.h`.
97+
const kExiting = 0;
98+
const kExitCode = 1;
99+
const kHasExitCode = 2;
100+
const fields = getHiddenValue(process, exit_info_private_symbol);
101+
97102
ObjectDefineProperty(process, '_exiting', {
98103
__proto__: null,
99104
get() {
100-
return exitingAliasedUint32Array[0] === 1;
105+
return fields[kExiting] === 1;
101106
},
102107
set(value) {
103-
exitingAliasedUint32Array[0] = value ? 1 : 0;
108+
fields[kExiting] = value ? 1 : 0;
104109
},
105110
enumerable: true,
106111
configurable: true,
107112
});
108-
}
109-
process._exiting = false;
110-
111-
{
112-
// Must match `Environment::ExitInfo::Fields` in `src/env.h`.
113-
const kExitCode = 0;
114-
const kHasExitCode = 1;
115-
const fields = getHiddenValue(process, exit_info_private_symbol);
116113

117114
let exitCode;
118-
119115
ObjectDefineProperty(process, 'exitCode', {
120116
__proto__: null,
121117
get() {
@@ -140,6 +136,7 @@ process._exiting = false;
140136
configurable: false,
141137
});
142138
}
139+
process._exiting = false;
143140

144141
// process.config is serialized config.gypi
145142
const nativeModule = internalBinding('builtins');

src/api/hooks.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Maybe<bool> EmitProcessBeforeExit(Environment* env) {
3939
HandleScope handle_scope(isolate);
4040
Context::Scope context_scope(env->context());
4141

42-
Local<Integer> exit_code = v8::Integer::New(
42+
Local<Integer> exit_code = Integer::New(
4343
isolate,
4444
env->maybe_exit_code(static_cast<int32_t>(ExitCode::kNoFailure)));
4545

src/env-inl.h

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -171,18 +171,6 @@ inline bool TickInfo::has_rejection_to_warn() const {
171171
return fields_[kHasRejectionToWarn] == 1;
172172
}
173173

174-
inline const AliasedInt32Array& ExitInfo::fields() {
175-
return fields_;
176-
}
177-
178-
inline bool ExitInfo::has_exit_code() const {
179-
return fields_[kHasExitCode] == 1;
180-
}
181-
182-
inline int32_t ExitInfo::exit_code() const {
183-
return fields_[kExitCode];
184-
}
185-
186174
inline Environment* Environment::GetCurrent(v8::Isolate* isolate) {
187175
if (UNLIKELY(!isolate->InContext())) return nullptr;
188176
v8::HandleScope handle_scope(isolate);
@@ -339,14 +327,6 @@ inline TickInfo* Environment::tick_info() {
339327
return &tick_info_;
340328
}
341329

342-
inline ExitInfo* Environment::exit_info() {
343-
return &exit_info_;
344-
}
345-
346-
inline int32_t Environment::maybe_exit_code(const int32_t default_code) const {
347-
return exit_info_.has_exit_code() ? exit_info_.exit_code() : default_code;
348-
}
349-
350330
inline uint64_t Environment::timer_base() const {
351331
return timer_base_;
352332
}
@@ -384,11 +364,15 @@ inline bool Environment::force_context_aware() const {
384364
}
385365

386366
inline void Environment::set_exiting(bool value) {
387-
exiting_[0] = value ? 1 : 0;
367+
exit_info_[kExiting] = value ? 1 : 0;
368+
}
369+
370+
inline int32_t Environment::maybe_exit_code(const int32_t default_code) const {
371+
return exit_info_[kHasExitCode] != 0 ? exit_info_[kExitCode] : default_code;
388372
}
389373

390-
inline AliasedUint32Array& Environment::exiting() {
391-
return exiting_;
374+
inline AliasedInt32Array& Environment::exit_info() {
375+
return exit_info_;
392376
}
393377

394378
inline void Environment::set_abort_on_uncaught_exception(bool value) {

src/env.cc

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -640,12 +640,11 @@ Environment::Environment(IsolateData* isolate_data,
640640
async_hooks_(isolate, MAYBE_FIELD_PTR(env_info, async_hooks)),
641641
immediate_info_(isolate, MAYBE_FIELD_PTR(env_info, immediate_info)),
642642
tick_info_(isolate, MAYBE_FIELD_PTR(env_info, tick_info)),
643-
exit_info_(isolate, MAYBE_FIELD_PTR(env_info, exit_info)),
644643
timer_base_(uv_now(isolate_data->event_loop())),
645644
exec_argv_(exec_args),
646645
argv_(args),
647646
exec_path_(GetExecPath(args)),
648-
exiting_(isolate_, 1, MAYBE_FIELD_PTR(env_info, exiting)),
647+
exit_info_(isolate_, 3, MAYBE_FIELD_PTR(env_info, exit_info)),
649648
should_abort_on_uncaught_toggle_(
650649
isolate_,
651650
1,
@@ -1508,29 +1507,6 @@ void AsyncHooks::FailWithCorruptedAsyncStack(double expected_async_id) {
15081507
ABORT_NO_BACKTRACE();
15091508
}
15101509

1511-
ExitInfo::SerializeInfo ExitInfo::Serialize(Local<Context> context,
1512-
SnapshotCreator* creator) {
1513-
return {fields_.Serialize(context, creator)};
1514-
}
1515-
1516-
void ExitInfo::Deserialize(Local<Context> context) {
1517-
fields_.Deserialize(context);
1518-
}
1519-
1520-
std::ostream& operator<<(std::ostream& output,
1521-
const ExitInfo::SerializeInfo& i) {
1522-
output << "{ " << i.fields << " }";
1523-
return output;
1524-
}
1525-
1526-
void ExitInfo::MemoryInfo(MemoryTracker* tracker) const {
1527-
tracker->TrackField("fields", fields_);
1528-
}
1529-
1530-
ExitInfo::ExitInfo(Isolate* isolate, const SerializeInfo* info)
1531-
: fields_(
1532-
isolate, kFieldsCount, info == nullptr ? nullptr : &(info->fields)) {}
1533-
15341510
void Environment::Exit(ExitCode exit_code) {
15351511
if (options()->trace_exit) {
15361512
HandleScope handle_scope(isolate());
@@ -1619,9 +1595,8 @@ EnvSerializeInfo Environment::Serialize(SnapshotCreator* creator) {
16191595
info.async_hooks = async_hooks_.Serialize(ctx, creator);
16201596
info.immediate_info = immediate_info_.Serialize(ctx, creator);
16211597
info.tick_info = tick_info_.Serialize(ctx, creator);
1622-
info.exit_info = exit_info_.Serialize(ctx, creator);
16231598
info.performance_state = performance_state_->Serialize(ctx, creator);
1624-
info.exiting = exiting_.Serialize(ctx, creator);
1599+
info.exit_info = exit_info_.Serialize(ctx, creator);
16251600
info.stream_base_state = stream_base_state_.Serialize(ctx, creator);
16261601
info.should_abort_on_uncaught_toggle =
16271602
should_abort_on_uncaught_toggle_.Serialize(ctx, creator);
@@ -1662,9 +1637,8 @@ void Environment::DeserializeProperties(const EnvSerializeInfo* info) {
16621637
async_hooks_.Deserialize(ctx);
16631638
immediate_info_.Deserialize(ctx);
16641639
tick_info_.Deserialize(ctx);
1665-
exit_info_.Deserialize(ctx);
16661640
performance_state_->Deserialize(ctx);
1667-
exiting_.Deserialize(ctx);
1641+
exit_info_.Deserialize(ctx);
16681642
stream_base_state_.Deserialize(ctx);
16691643
should_abort_on_uncaught_toggle_.Deserialize(ctx);
16701644

@@ -1851,15 +1825,14 @@ void Environment::MemoryInfo(MemoryTracker* tracker) const {
18511825
tracker->TrackField("builtins_without_cache", builtins_without_cache);
18521826
tracker->TrackField("destroy_async_id_list", destroy_async_id_list_);
18531827
tracker->TrackField("exec_argv", exec_argv_);
1854-
tracker->TrackField("exiting", exiting_);
1828+
tracker->TrackField("exit_info", exit_info_);
18551829
tracker->TrackField("should_abort_on_uncaught_toggle",
18561830
should_abort_on_uncaught_toggle_);
18571831
tracker->TrackField("stream_base_state", stream_base_state_);
18581832
tracker->TrackField("cleanup_queue", cleanup_queue_);
18591833
tracker->TrackField("async_hooks", async_hooks_);
18601834
tracker->TrackField("immediate_info", immediate_info_);
18611835
tracker->TrackField("tick_info", tick_info_);
1862-
tracker->TrackField("exit_info", exit_info_);
18631836
tracker->TrackField("principal_realm", principal_realm_);
18641837

18651838
// FIXME(joyeecheung): track other fields in Environment.

src/env.h

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -459,40 +459,8 @@ class TickInfo : public MemoryRetainer {
459459
AliasedUint8Array fields_;
460460
};
461461

462-
class ExitInfo : public MemoryRetainer {
463-
public:
464-
inline const AliasedInt32Array& fields();
465-
inline bool has_exit_code() const;
466-
inline int32_t exit_code() const;
467-
468-
SET_MEMORY_INFO_NAME(ExitInfo)
469-
SET_SELF_SIZE(ExitInfo)
470-
void MemoryInfo(MemoryTracker* tracker) const override;
471-
472-
ExitInfo(const ExitInfo&) = delete;
473-
ExitInfo& operator=(const ExitInfo&) = delete;
474-
ExitInfo(ExitInfo&&) = delete;
475-
ExitInfo& operator=(ExitInfo&&) = delete;
476-
~ExitInfo() = default;
477-
478-
struct SerializeInfo {
479-
AliasedBufferIndex fields;
480-
};
481-
SerializeInfo Serialize(v8::Local<v8::Context> context,
482-
v8::SnapshotCreator* creator);
483-
void Deserialize(v8::Local<v8::Context> context);
484-
485-
enum Fields { kExitCode = 0, kHasExitCode, kFieldsCount };
486-
487-
private:
488-
friend class Environment; // So we can call the constructor.
489-
explicit ExitInfo(v8::Isolate* isolate, const SerializeInfo* info);
490-
491-
AliasedInt32Array fields_;
492-
};
493-
494-
class TrackingTraceStateObserver :
495-
public v8::TracingController::TraceStateObserver {
462+
class TrackingTraceStateObserver
463+
: public v8::TracingController::TraceStateObserver {
496464
public:
497465
explicit TrackingTraceStateObserver(Environment* env) : env_(env) {}
498466

@@ -546,8 +514,7 @@ struct EnvSerializeInfo {
546514
TickInfo::SerializeInfo tick_info;
547515
ImmediateInfo::SerializeInfo immediate_info;
548516
performance::PerformanceState::SerializeInfo performance_state;
549-
ExitInfo::SerializeInfo exit_info;
550-
AliasedBufferIndex exiting;
517+
AliasedBufferIndex exit_info;
551518
AliasedBufferIndex stream_base_state;
552519
AliasedBufferIndex should_abort_on_uncaught_toggle;
553520

@@ -759,8 +726,6 @@ class Environment : public MemoryRetainer {
759726
inline AsyncHooks* async_hooks();
760727
inline ImmediateInfo* immediate_info();
761728
inline TickInfo* tick_info();
762-
inline ExitInfo* exit_info();
763-
inline int32_t maybe_exit_code(const int32_t default_code) const;
764729
inline uint64_t timer_base() const;
765730
inline std::shared_ptr<KVStore> env_vars();
766731
inline void set_env_vars(std::shared_ptr<KVStore> env_vars);
@@ -776,10 +741,12 @@ class Environment : public MemoryRetainer {
776741
inline void set_force_context_aware(bool value);
777742
inline bool force_context_aware() const;
778743

779-
// This is a pseudo-boolean that keeps track of whether the process is
780-
// exiting.
744+
// This contains fields that are a pseudo-boolean that keeps track of whether
745+
// the process is exiting, an integer representing the process exit code, and
746+
// a pseudo-boolean to indicate whether the exit code is undefined.
747+
inline AliasedInt32Array& exit_info();
781748
inline void set_exiting(bool value);
782-
inline AliasedUint32Array& exiting();
749+
inline int32_t maybe_exit_code(const int32_t default_code) const;
783750

784751
// This stores whether the --abort-on-uncaught-exception flag was passed
785752
// to Node.
@@ -1089,7 +1056,6 @@ class Environment : public MemoryRetainer {
10891056
AsyncHooks async_hooks_;
10901057
ImmediateInfo immediate_info_;
10911058
TickInfo tick_info_;
1092-
ExitInfo exit_info_;
10931059
const uint64_t timer_base_;
10941060
std::shared_ptr<KVStore> env_vars_;
10951061
bool printed_error_ = false;
@@ -1137,8 +1103,8 @@ class Environment : public MemoryRetainer {
11371103
uint32_t script_id_counter_ = 0;
11381104
uint32_t function_id_counter_ = 0;
11391105

1140-
// TODO(daeyeon): merge into `exit_info_`
1141-
AliasedUint32Array exiting_;
1106+
enum ExitInfoFields { kExiting = 0, kExitCode, kHasExitCode, kFieldsCount };
1107+
AliasedInt32Array exit_info_;
11421108

11431109
AliasedUint32Array should_abort_on_uncaught_toggle_;
11441110
int should_not_abort_scope_counter_ = 0;

src/env_properties.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
V(napi_type_tag, "node:napi:type_tag") \
2626
V(napi_wrapper, "node:napi:wrapper") \
2727
V(untransferable_object_private_symbol, "node:untransferableObject") \
28-
V(exiting_aliased_Uint32Array, "node:exiting_aliased_Uint32Array") \
2928
V(exit_info_private_symbol, "node:exit_info_private_symbol")
3029

3130
// Symbols are per-isolate primitives but Environment proxies them

src/node_internals.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,6 @@ std::ostream& operator<<(std::ostream& output,
414414
std::ostream& operator<<(std::ostream& output,
415415
const AsyncHooks::SerializeInfo& d);
416416
std::ostream& operator<<(std::ostream& output, const SnapshotMetadata& d);
417-
std::ostream& operator<<(std::ostream& output,
418-
const ExitInfo::SerializeInfo& d);
419417

420418
namespace performance {
421419
std::ostream& operator<<(std::ostream& output,

src/node_process_object.cc

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,11 @@ MaybeLocal<Object> CreateProcessObject(Realm* realm) {
9292
return MaybeLocal<Object>();
9393
}
9494

95-
// process[exiting_aliased_Uint32Array]
96-
if (process
97-
->SetPrivate(context,
98-
realm->env()->exiting_aliased_Uint32Array(),
99-
realm->env()->exiting().GetJSArray())
100-
.IsNothing()) {
101-
return {};
102-
}
103-
10495
// process[exit_info_private_symbol]
10596
if (process
10697
->SetPrivate(context,
10798
realm->env()->exit_info_private_symbol(),
108-
realm->env()->exit_info()->fields().GetJSArray())
99+
realm->env()->exit_info().GetJSArray())
109100
.IsNothing()) {
110101
return {};
111102
}

0 commit comments

Comments
 (0)