From b32efad2bc42460637c3a364c9554ea8217b3d7f Mon Sep 17 00:00:00 2001 From: Matt Clayton <156335168+mattjcly@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:01:58 -0400 Subject: [PATCH] llava: improve clip_ctx destructor to not memleak load_image_size (#12834) --- examples/llava/clip.cpp | 10 ++++++++++ examples/llava/clip.h | 1 + 2 files changed, 11 insertions(+) diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp index e9520f3d1..44428cc95 100644 --- a/examples/llava/clip.cpp +++ b/examples/llava/clip.cpp @@ -380,6 +380,7 @@ struct clip_ctx { if (backend_cpu != backend) { ggml_backend_free(backend_cpu); } + clip_image_size_free(load_image_size); } }; @@ -1618,6 +1619,12 @@ struct clip_image_f32 * clip_image_f32_init() { return new clip_image_f32(); } +void clip_image_size_free(struct clip_image_size * load_image_size) { + if (load_image_size == nullptr) { + return; + } + delete load_image_size; +} void clip_image_u8_free(struct clip_image_u8 * img) { delete img; } void clip_image_f32_free(struct clip_image_f32 * img) { delete img; } void clip_image_u8_batch_free(struct clip_image_u8_batch * batch) { @@ -2270,6 +2277,9 @@ ggml_tensor * clip_get_newline_tensor(const struct clip_ctx * ctx) { } void clip_free(clip_ctx * ctx) { + if (ctx == nullptr) { + return; + } delete ctx; } diff --git a/examples/llava/clip.h b/examples/llava/clip.h index d806465bf..87aa61574 100644 --- a/examples/llava/clip.h +++ b/examples/llava/clip.h @@ -77,6 +77,7 @@ CLIP_API struct clip_image_size * clip_image_size_init(); CLIP_API struct clip_image_u8 * clip_image_u8_init (); CLIP_API struct clip_image_f32 * clip_image_f32_init(); +CLIP_API void clip_image_size_free (struct clip_image_size * img_size); CLIP_API void clip_image_u8_free (struct clip_image_u8 * img); CLIP_API void clip_image_f32_free(struct clip_image_f32 * img); CLIP_API void clip_image_u8_batch_free (struct clip_image_u8_batch * batch);