Răsfoiți Sursa

Memory Leak

`dir` will leak memory if u use it with allocators that don´t care in freeing the memory at the end ( like arenas or the temp_allocator ) , because `strings.clone` and `strings.concatenate` are not using the passed allocator.
Patric Dexheimer 3 ani în urmă
părinte
comite
d7eabf571c
1 a modificat fișierele cu 3 adăugiri și 2 ștergeri
  1. 3 2
      core/path/filepath/path.odin

+ 3 - 2
core/path/filepath/path.odin

@@ -284,13 +284,14 @@ rel :: proc(base_path, target_path: string, allocator := context.allocator) -> (
 }
 }
 
 
 dir :: proc(path: string, allocator := context.allocator) -> string {
 dir :: proc(path: string, allocator := context.allocator) -> string {
+        context.allocator = allocator
 	vol := volume_name(path)
 	vol := volume_name(path)
 	i := len(path) - 1
 	i := len(path) - 1
 	for i >= len(vol) && !is_separator(path[i]) {
 	for i >= len(vol) && !is_separator(path[i]) {
 		i -= 1
 		i -= 1
 	}
 	}
-	dir := clean(path[len(vol) : i+1], allocator)
-	defer delete(dir, allocator)
+	dir := clean(path[len(vol) : i+1])
+	defer delete(dir)
 	if dir == "." && len(vol) > 2 {
 	if dir == "." && len(vol) > 2 {
 		return strings.clone(vol)
 		return strings.clone(vol)
 	}
 	}