|
11 | 11 | #include "node_internals.h" |
12 | 12 | #include "node_options-inl.h" |
13 | 13 | #include "node_process-inl.h" |
| 14 | +#include "node_shadow_realm.h" |
14 | 15 | #include "node_v8_platform-inl.h" |
15 | 16 | #include "node_worker.h" |
16 | 17 | #include "req_wrap-inl.h" |
@@ -226,6 +227,14 @@ void Environment::UntrackContext(Local<Context> context) { |
226 | 227 | } |
227 | 228 | } |
228 | 229 |
|
| 230 | +void Environment::TrackShadowRealm(shadow_realm::ShadowRealm* realm) { |
| 231 | + shadow_realms_.insert(realm); |
| 232 | +} |
| 233 | + |
| 234 | +void Environment::UntrackShadowRealm(shadow_realm::ShadowRealm* realm) { |
| 235 | + shadow_realms_.erase(realm); |
| 236 | +} |
| 237 | + |
229 | 238 | AsyncHooks::DefaultTriggerAsyncIdScope::DefaultTriggerAsyncIdScope( |
230 | 239 | Environment* env, double default_trigger_async_id) |
231 | 240 | : async_hooks_(env->async_hooks()) { |
@@ -901,6 +910,10 @@ Environment::~Environment() { |
901 | 910 | addon.Close(); |
902 | 911 | } |
903 | 912 | } |
| 913 | + |
| 914 | + for (auto realm : shadow_realms_) { |
| 915 | + realm->OnEnvironmentDestruct(); |
| 916 | + } |
904 | 917 | } |
905 | 918 |
|
906 | 919 | void Environment::InitializeLibuv() { |
@@ -1896,6 +1909,7 @@ void Environment::MemoryInfo(MemoryTracker* tracker) const { |
1896 | 1909 | tracker->TrackField("timeout_info", timeout_info_); |
1897 | 1910 | tracker->TrackField("tick_info", tick_info_); |
1898 | 1911 | tracker->TrackField("principal_realm", principal_realm_); |
| 1912 | + tracker->TrackField("shadow_realms", shadow_realms_); |
1899 | 1913 |
|
1900 | 1914 | // FIXME(joyeecheung): track other fields in Environment. |
1901 | 1915 | // Currently MemoryTracker is unable to track these |
|
0 commit comments