◐ Shell
clean mode source ↗

module: fix the leak in SourceTextModule and ContextifySript · nodejs/node@7552de6

Original file line numberDiff line numberDiff line change

@@ -55,7 +55,10 @@ ModuleWrap::ModuleWrap(Environment* env,

5555

Local<String> url,

5656

Local<Object> context_object,

5757

Local<Value> synthetic_evaluation_step)

58-

: BaseObject(env, object), module_(env->isolate(), module) {

58+

: BaseObject(env, object),

59+

module_(env->isolate(), module),

60+

module_hash_(module->GetIdentityHash()) {

61+

object->SetInternalFieldForNodeCore(kModuleSlot, module);

5962

object->SetInternalField(kURLSlot, url);

6063

object->SetInternalField(kSyntheticEvaluationStepsSlot,

6164

synthetic_evaluation_step);

@@ -65,12 +68,12 @@ ModuleWrap::ModuleWrap(Environment* env,

6568

synthetic_ = true;

6669

}

6770

MakeWeak();

71+

module_.SetWeak();

6872

}

6973
7074

ModuleWrap::~ModuleWrap() {

7175

HandleScope scope(env()->isolate());

72-

Local<Module> module = module_.Get(env()->isolate());

73-

auto range = env()->hash_to_module_map.equal_range(module->GetIdentityHash());

76+

auto range = env()->hash_to_module_map.equal_range(module_hash_);

7477

for (auto it = range.first; it != range.second; ++it) {

7578

if (it->second == this) {

7679

env()->hash_to_module_map.erase(it);