From 098ab943d88244634213c9443258c7b659525eda Mon Sep 17 00:00:00 2001 From: Elbios Date: Wed, 14 Feb 2024 19:35:23 +0100 Subject: [PATCH] Make it cleaner by checking size in batch free wrapper --- examples/llava/clip.cpp | 18 ++++++++++++++---- examples/llava/clip.h | 4 ++-- examples/server/server.cpp | 20 ++++---------------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp index 64cd508e5..2cad27e82 100644 --- a/examples/llava/clip.cpp +++ b/examples/llava/clip.cpp @@ -1230,10 +1230,20 @@ struct clip_image_f32 * clip_image_f32_init() { return new clip_image_f32(); } -void clip_image_u8_free (struct clip_image_u8 * img) { delete img; } +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 * data) { delete[] data; } -void clip_image_f32_batch_free(struct clip_image_f32 * data) { delete[] data; } +void clip_image_u8_batch_free(struct clip_image_u8_batch & batch) { + if (batch.size > 0) { + delete[] batch.data; + batch.size = 0; + } +} +void clip_image_f32_batch_free(struct clip_image_f32_batch & batch) { + if (batch.size > 0) { + delete[] batch.data; + batch.size = 0; + } +} static void build_clip_img_from_data(const stbi_uc * data, int nx, int ny, clip_image_u8 * img) { img->nx = nx; @@ -1497,7 +1507,7 @@ bool clip_image_preprocess(struct clip_ctx * ctx, const clip_image_u8 * img, cli } // free the previous res_imgs if any set if (res_imgs.size > 0) { - clip_image_f32_batch_free(res_imgs.data); + clip_image_f32_batch_free(res_imgs); } res_imgs.data = nullptr; res_imgs.size = 0; diff --git a/examples/llava/clip.h b/examples/llava/clip.h index ae637697a..e5bd54924 100644 --- a/examples/llava/clip.h +++ b/examples/llava/clip.h @@ -60,8 +60,8 @@ CLIP_API struct clip_image_f32 * clip_image_f32_init(); 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 * data); -CLIP_API void clip_image_f32_batch_free(struct clip_image_f32 * data); +CLIP_API void clip_image_u8_batch_free (struct clip_image_u8_batch & batch); +CLIP_API void clip_image_f32_batch_free(struct clip_image_f32_batch & batch); CLIP_API bool clip_image_load_from_file(const char * fname, struct clip_image_u8 * img); diff --git a/examples/server/server.cpp b/examples/server/server.cpp index ab2cff89c..2decd7762 100644 --- a/examples/server/server.cpp +++ b/examples/server/server.cpp @@ -975,10 +975,7 @@ struct llama_server_context { LOG_TEE("Error processing the given image"); clip_free(clp_ctx); - if (img_res_v.size > 0) - { - clip_image_f32_batch_free(img_res_v.data); - } + clip_image_f32_batch_free(img_res_v); return false; } if (img_res_v.size == 0) @@ -995,10 +992,7 @@ struct llama_server_context if (!img.image_embedding) { LOG_TEE("Unable to allocate memory for image embeddings\n"); - if (img_res_v.size > 0) - { - clip_image_f32_batch_free(img_res_v.data); - } + clip_image_f32_batch_free(img_res_v); clip_free(clp_ctx); return false; } @@ -1006,17 +1000,11 @@ struct llama_server_context if (!clip_image_encode(clp_ctx, params.n_threads, img_res, img.image_embedding)) { LOG_TEE("Unable to encode image\n"); - if (img_res_v.size > 0) - { - clip_image_f32_batch_free(img_res_v.data); - } + clip_image_f32_batch_free(img_res_v); return false; } - if (img_res_v.size > 0) - { - clip_image_f32_batch_free(img_res_v.data); - } + clip_image_f32_batch_free(img_res_v); img.request_encode_image = false; }