Sfoglia il codice sorgente

Merge pull request #277 from szdytom/fix-some-leak

Fix memory leaks
BLUELOVETH 1 anno fa
parent
commit
f06f7e21c9
2 ha cambiato i file con 3 aggiunte e 1 eliminazioni
  1. 1 0
      src/compiler/compiler.cpp
  2. 2 1
      src/interpreter/vm.cpp

+ 1 - 0
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;
 }

+ 2 - 1
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<DummyInstance>(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);