GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — src: fix uninitialized field access in AsyncHooks · nodejs/node@97bd9cc

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • src
    • env.cc
    • env.h
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/env.cc‎

Copy file name to clipboardExpand all lines: src/env.cc
+5-7Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,13 @@ bool AsyncHooks::pop_async_context(double async_id) {
170170
}
171171

172172
void AsyncHooks::clear_async_id_stack() {
173-
if (env()->can_call_into_js()) {
173+
if (!js_execution_async_resources_.IsEmpty() && env()->can_call_into_js()) {
174174
Isolate* isolate = env()->isolate();
175175
HandleScope handle_scope(isolate);
176-
if (!js_execution_async_resources_.IsEmpty()) {
177-
USE(PersistentToLocal::Strong(js_execution_async_resources_)
178-
->Set(env()->context(),
179-
env()->length_string(),
180-
Integer::NewFromUnsigned(isolate, 0)));
181-
}
176+
USE(PersistentToLocal::Strong(js_execution_async_resources_)
177+
->Set(env()->context(),
178+
env()->length_string(),
179+
Integer::NewFromUnsigned(isolate, 0)));
182180
}
183181

184182
native_execution_async_resources_.clear();
Collapse file

‎src/env.h‎

Copy file name to clipboardExpand all lines: src/env.h
+4-3Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,10 @@ class Environment : public MemoryRetainer {
10151015
uv_async_t task_queues_async_;
10161016
int64_t task_queues_async_refs_ = 0;
10171017

1018+
// These may be read by ctors and should be listed before complex fields.
1019+
std::atomic_bool is_stopping_{false};
1020+
std::atomic_bool can_call_into_js_{true};
1021+
10181022
AsyncHooks async_hooks_;
10191023
ImmediateInfo immediate_info_;
10201024
AliasedInt32Array timeout_info_;
@@ -1092,7 +1096,6 @@ class Environment : public MemoryRetainer {
10921096

10931097
bool has_serialized_options_ = false;
10941098

1095-
std::atomic_bool can_call_into_js_ { true };
10961099
uint64_t flags_;
10971100
uint64_t thread_id_;
10981101
std::unordered_set<worker::Worker*> sub_worker_contexts_;
@@ -1150,8 +1153,6 @@ class Environment : public MemoryRetainer {
11501153
CleanupQueue cleanup_queue_;
11511154
bool started_cleanup_ = false;
11521155

1153-
std::atomic_bool is_stopping_ { false };
1154-
11551156
std::unordered_set<int> unmanaged_fds_;
11561157

11571158
std::function<void(Environment*, ExitCode)> process_exit_handler_{

0 commit comments

Comments
0 (0)
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.