src: fix uninitialized field access in AsyncHooks

Co-authored-by: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/48566
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
This commit is contained in:
Jan Olaf KremsandJoyee Cheung authored and GitHub committed 2023-07-03 11:44:50 +00:00
1 parent d312bd96d3
commit 5ff46dbb31
2 files changed
+9 -10

No files matched your search

+5 -7
View File
@@ -170,15 +170,13 @@ bool AsyncHooks::pop_async_context(double async_id) {
}
void AsyncHooks::clear_async_id_stack() {
if (env()->can_call_into_js()) {
if (!js_execution_async_resources_.IsEmpty() && env()->can_call_into_js()) {
Isolate* isolate = env()->isolate();
HandleScope handle_scope(isolate);
if (!js_execution_async_resources_.IsEmpty()) {
USE(PersistentToLocal::Strong(js_execution_async_resources_)
->Set(env()->context(),
env()->length_string(),
Integer::NewFromUnsigned(isolate, 0)));
}
USE(PersistentToLocal::Strong(js_execution_async_resources_)
->Set(env()->context(),
env()->length_string(),
Integer::NewFromUnsigned(isolate, 0)));
}
native_execution_async_resources_.clear();
+4 -3
View File
@@ -1015,6 +1015,10 @@ class Environment : public MemoryRetainer {
uv_async_t task_queues_async_;
int64_t task_queues_async_refs_ = 0;
// These may be read by ctors and should be listed before complex fields.
std::atomic_bool is_stopping_{false};
std::atomic_bool can_call_into_js_{true};
AsyncHooks async_hooks_;
ImmediateInfo immediate_info_;
AliasedInt32Array timeout_info_;
@@ -1092,7 +1096,6 @@ class Environment : public MemoryRetainer {
bool has_serialized_options_ = false;
std::atomic_bool can_call_into_js_ { true };
uint64_t flags_;
uint64_t thread_id_;
std::unordered_set<worker::Worker*> sub_worker_contexts_;
@@ -1150,8 +1153,6 @@ class Environment : public MemoryRetainer {
CleanupQueue cleanup_queue_;
bool started_cleanup_ = false;
std::atomic_bool is_stopping_ { false };
std::unordered_set<int> unmanaged_fds_;
std::function<void(Environment*, ExitCode)> process_exit_handler_{