diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index 327865f40..25ed7664a 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..10e245858 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, @@ -626,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 @@ -802,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); };