fix a memory leak

This commit is contained in:
blueloveTH 2025-02-10 14:05:39 +08:00
parent fc0d758e64
commit 9db90216d1

View File

@ -156,7 +156,10 @@ __SUCCESS:
c11_string__delete(filename); c11_string__delete(filename);
c11_string__delete(slashed_path); 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; 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_sv path = py_tosv(py_getdict(module, __path__));
c11_string* slashed_path = c11_sv__replace(path, '.', PK_PLATFORM_SEP); c11_string* slashed_path = c11_sv__replace(path, '.', PK_PLATFORM_SEP);
c11_string* filename = c11_string__new3("%s.py", slashed_path->data); 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) { if(data == NULL) {
c11_string__delete(filename); c11_string__delete(filename);
filename = c11_string__new3("%s%c__init__.py", slashed_path->data, PK_PLATFORM_SEP); 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); if(data == NULL) return ImportError("module '%v' not found", path);
bool ok = py_exec(data, filename->data, EXEC_MODE, module); bool ok = py_exec(data, filename->data, EXEC_MODE, module);
c11_string__delete(filename); c11_string__delete(filename);
free(data);
py_assign(py_retval(), module); py_assign(py_retval(), module);
return ok; return ok;
} }