Jelajahi Sumber

fix a memory leak

blueloveTH 1 tahun lalu
induk
melakukan
9db90216d1
1 mengubah file dengan 6 tambahan dan 2 penghapusan
  1. 6 2
      src/public/modules.c

+ 6 - 2
src/public/modules.c

@@ -156,7 +156,10 @@ __SUCCESS:
 
     c11_string__delete(filename);
     c11_string__delete(slashed_path);
-    if(need_free) PK_FREE((void*)data);
+    if(need_free){
+        // data is from `callbacks.importfile` we should use `free()`
+        free((void*)data);
+    }
     return ok ? 1 : -1;
 }
 
@@ -165,7 +168,7 @@ bool py_importlib_reload(py_GlobalRef module) {
     c11_sv path = py_tosv(py_getdict(module, __path__));
     c11_string* slashed_path = c11_sv__replace(path, '.', PK_PLATFORM_SEP);
     c11_string* filename = c11_string__new3("%s.py", slashed_path->data);
-    const char* data = vm->callbacks.importfile(filename->data);
+    char* data = vm->callbacks.importfile(filename->data);
     if(data == NULL) {
         c11_string__delete(filename);
         filename = c11_string__new3("%s%c__init__.py", slashed_path->data, PK_PLATFORM_SEP);
@@ -175,6 +178,7 @@ bool py_importlib_reload(py_GlobalRef module) {
     if(data == NULL) return ImportError("module '%v' not found", path);
     bool ok = py_exec(data, filename->data, EXEC_MODE, module);
     c11_string__delete(filename);
+    free(data);
     py_assign(py_retval(), module);
     return ok;
 }