]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
gguf : fix resource leaks (#6061)
authorSteve Grubb <redacted>
Thu, 14 Mar 2024 18:29:32 +0000 (14:29 -0400)
committerGitHub <redacted>
Thu, 14 Mar 2024 18:29:32 +0000 (20:29 +0200)
There several places where a gguf context is allocated. A call to gguf_free
is missing in some error paths. Also on linux, llama-bench was missing a
fclose.

examples/gguf/gguf.cpp
examples/llama-bench/llama-bench.cpp
examples/llava/clip.cpp
examples/train-text-from-scratch/train-text-from-scratch.cpp

index e67be4fb2995ec27744d301fe31e36d87d0b3738..5444503a5d218041e0c04038fe9d42919fba8ecd 100644 (file)
@@ -211,6 +211,7 @@ static bool gguf_ex_read_1(const std::string & fname) {
                 for (int j = 0; j < ggml_nelements(cur); ++j) {
                     if (data[j] != 100 + i) {
                         fprintf(stderr, "%s: tensor[%d]: data[%d] = %f\n", __func__, i, j, data[j]);
+                        gguf_free(ctx);
                         return false;
                     }
                 }
index bf94e7e7a60a4879492c0ca719efb430fa5fe2db..d6e5e0497dc3ae5443af4e1ccf1cb952071fad68 100644 (file)
@@ -103,6 +103,7 @@ static std::string get_cpu_info() {
                 }
             }
         }
+        fclose(f);
     }
 #endif
     // TODO: other platforms
index 6653b815d93a16e8983219afd654750152d7d26d..2035554ea87414089009edec2aed35ca5acfdb80 100644 (file)
@@ -995,6 +995,7 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
         if (!new_clip->ctx_data) {
             fprintf(stderr, "%s: ggml_init() failed\n", __func__);
             clip_free(new_clip);
+            gguf_free(ctx);
             return nullptr;
         }
 
@@ -1002,6 +1003,7 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
         if (!fin) {
             printf("cannot open model file for loading tensors\n");
             clip_free(new_clip);
+            gguf_free(ctx);
             return nullptr;
         }
 
@@ -1023,6 +1025,7 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
             if (!fin) {
                 printf("%s: failed to seek for tensor %s\n", __func__, name);
                 clip_free(new_clip);
+                gguf_free(ctx);
                 return nullptr;
             }
             int num_bytes = ggml_nbytes(cur);
@@ -1908,6 +1911,7 @@ bool clip_model_quantize(const char * fname_inp, const char * fname_out, const i
                 break;
             default:
                 printf("Please use an input file in f32 or f16\n");
+                gguf_free(ctx_out);
                 return false;
             }
 
index 7eafe8515a943d3408cd21b2efb08fd0a9c5235a..7d06e401b462bea9bc3ff5b97e6bed46c4087ca9 100644 (file)
@@ -711,6 +711,7 @@ static bool load_checkpoint_file(const char * filename, struct my_llama_model *
 
     load_checkpoint_gguf(fctx, f_ggml_ctx, model, train);
 
+    gguf_free(fctx);
     return true;
 }