From b7b7c125ae6af517f8110b5a613017ce8ad70fdc Mon Sep 17 00:00:00 2001 From: Green Sky Date: Mon, 1 Jan 2024 14:28:00 +0100 Subject: [PATCH 1/2] fix a bunch of leaks. I am sure there are more, especially on the error paths. --- examples/cli/main.cpp | 3 +++ stable-diffusion.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index 327865f40..f2e706b88 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -560,6 +560,7 @@ int main(int argc, const char* argv[]) { if (results == NULL) { printf("generate failed\n"); + free_sd_ctx(sd_ctx); return 1; } @@ -600,6 +601,8 @@ int main(int argc, const char* argv[]) { free(results[i].data); results[i].data = NULL; } + free(results); + free_sd_ctx(sd_ctx); return 0; } diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index f67d33828..9d67e866d 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -101,6 +101,7 @@ class StableDiffusionGGML { } ~StableDiffusionGGML() { + ggml_backend_free(backend); } bool load_from_file(const std::string& model_path, From 512af35ca036e4a66ee4ef136ef0f909b90f4031 Mon Sep 17 00:00:00 2001 From: leejet Date: Mon, 1 Jan 2024 23:13:24 +0800 Subject: [PATCH 2/2] format code --- examples/cli/main.cpp | 2 +- stable-diffusion.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index f2e706b88..25ed7664a 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -601,7 +601,7 @@ int main(int argc, const char* argv[]) { free(results[i].data); results[i].data = NULL; } - free(results); + free(results); free_sd_ctx(sd_ctx); return 0; diff --git a/stable-diffusion.cpp b/stable-diffusion.cpp index 9d67e866d..10e245858 100644 --- a/stable-diffusion.cpp +++ b/stable-diffusion.cpp @@ -627,7 +627,7 @@ class StableDiffusionGGML { // get_ancestral_step float sigma_up = std::min(sigmas[i + 1], - std::sqrt(sigmas[i + 1] * sigmas[i + 1] * (sigmas[i] * sigmas[i] - sigmas[i + 1] * sigmas[i + 1]) / (sigmas[i] * sigmas[i]))); + std::sqrt(sigmas[i + 1] * sigmas[i + 1] * (sigmas[i] * sigmas[i] - sigmas[i + 1] * sigmas[i + 1]) / (sigmas[i] * sigmas[i]))); float sigma_down = std::sqrt(sigmas[i + 1] * sigmas[i + 1] - sigma_up * sigma_up); // Euler method @@ -803,7 +803,7 @@ class StableDiffusionGGML { // get_ancestral_step float sigma_up = std::min(sigmas[i + 1], - std::sqrt(sigmas[i + 1] * sigmas[i + 1] * (sigmas[i] * sigmas[i] - sigmas[i + 1] * sigmas[i + 1]) / (sigmas[i] * sigmas[i]))); + std::sqrt(sigmas[i + 1] * sigmas[i + 1] * (sigmas[i] * sigmas[i] - sigmas[i + 1] * sigmas[i + 1]) / (sigmas[i] * sigmas[i]))); float sigma_down = std::sqrt(sigmas[i + 1] * sigmas[i + 1] - sigma_up * sigma_up); auto t_fn = [](float sigma) -> float { return -log(sigma); }; auto sigma_fn = [](float t) -> float { return exp(-t); };