From c4d14847e8aa70ea12587f1882d9825f145c6a18 Mon Sep 17 00:00:00 2001 From: szdytom Date: Mon, 17 Jun 2024 21:40:50 +0800 Subject: [PATCH 1/2] fix leaks --- src/interpreter/vm.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/interpreter/vm.cpp b/src/interpreter/vm.cpp index 63704d69..64f32eed 100644 --- a/src/interpreter/vm.cpp +++ b/src/interpreter/vm.cpp @@ -583,7 +583,6 @@ PyVar VM::__py_exec_internal(const CodeObject_& code, PyVar globals, PyVar local check_compatible_type(globals, VM::tp_dict); // make a temporary object and copy globals into it globals_obj = new_object(VM::tp_object).get(); - globals_obj->_attr = new NameDict(); globals_dict = &PK_OBJ_GET(Dict, globals); globals_dict->apply([&](PyVar k, PyVar v) { globals_obj->attr().set(CAST(Str&, k), v); @@ -1893,6 +1892,8 @@ void ManagedHeap::mark() { void ManagedHeap::_delete(PyObject* obj) { const PyTypeInfo* ti = vm->_tp_info(obj->type); if(ti->vt._dtor) ti->vt._dtor(obj->_value_ptr()); + if (obj->_attr) + c11_vector__dtor(obj->_attr); delete obj->_attr; // delete __dict__ if exists if(obj->gc_is_large){ std::free(obj); From 2c5f46f096b690bc65e26843a7ad4cf8052e8728 Mon Sep 17 00:00:00 2001 From: szdytom Date: Tue, 18 Jun 2024 23:16:38 +0800 Subject: [PATCH 2/2] call s_clean before pop context --- src/compiler/compiler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/compiler.cpp b/src/compiler/compiler.cpp index 26d0ebb5..4572d897 100644 --- a/src/compiler/compiler.cpp +++ b/src/compiler/compiler.cpp @@ -101,6 +101,7 @@ Error* Compiler::pop_context() noexcept{ assert(func->type != FuncType::UNSET); } + contexts.back().s_clean(); contexts.pop_back(); return NULL; }