diff --git a/runtime/ecma_vm.cpp b/runtime/ecma_vm.cpp index 405fc815f7c53e02b9b8b1cf97e5239c8b1a6a5c..969c9c3ba46548c47ccfcb250c2a96781760c7a7 100644 --- a/runtime/ecma_vm.cpp +++ b/runtime/ecma_vm.cpp @@ -560,6 +560,12 @@ void EcmaVM::SweepVmRefs(const GCObjectVisitor &gc_object_visitor) ++it; } } + ProcessPrograms([gc_object_visitor](TaggedObject *obj) -> TaggedObject * { + if (gc_object_visitor(obj) == ObjectStatus::DEAD_OBJECT) { + return nullptr; + } + return obj; + }); } JSHandle EcmaVM::GetGlobalEnv() const @@ -812,7 +818,6 @@ void EcmaVM::ProcessPrograms(const WeakRootVisitor &v0) object->FreeMethodData(); auto pf = std::get<1>(*iter); extractorCache_.erase(pf); - delete pf; iter = pandaFileWithProgram_.erase(iter); } else if (fwd != object) { *iter = std::make_tuple(reinterpret_cast(fwd), std::get<1>(*iter),