From 8cdf0018dfafc610068ab2e74a4402ea8f8381e3 Mon Sep 17 00:00:00 2001 From: Valentin Roland Date: Tue, 30 Apr 2024 20:54:40 +0200 Subject: [PATCH] Fix memory leak when deinitializing display feeder tasks --- src/render.c | 6 ++++-- test/test_initialization.c | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/render.c b/src/render.c index ffe73962..b1a10b6e 100644 --- a/src/render.c +++ b/src/render.c @@ -17,6 +17,7 @@ #include #include +#include "esp_heap_caps.h" #include "output_common/line_queue.h" #include "output_common/lut.h" #include "output_common/render_context.h" @@ -338,6 +339,7 @@ void epd_renderer_deinit() { for (int i = 0; i < NUM_RENDER_THREADS; i++) { vTaskDelete(render_context.feed_tasks[i]); lq_free(&render_context.line_queues[i]); + heap_caps_free(render_context.feed_line_buffers[i]); vSemaphoreDelete(render_context.feed_done_smphr[i]); } @@ -351,8 +353,8 @@ void epd_renderer_deinit() { epd_board->deinit(); } - free(render_context.conversion_lut); - free(render_context.line_threads); + heap_caps_free(render_context.conversion_lut); + heap_caps_free(render_context.line_threads); vSemaphoreDelete(render_context.frame_done); } diff --git a/test/test_initialization.c b/test/test_initialization.c index 4faecdeb..c605169a 100644 --- a/test/test_initialization.c +++ b/test/test_initialization.c @@ -1,3 +1,4 @@ +#include #include #include "freertos/FreeRTOS.h" #include "freertos/task.h" @@ -35,6 +36,7 @@ TEST_CASE("re-initialization works", "[epdiy,e2e]") epd_deinit(); + int before_init = esp_get_free_internal_heap_size(); epd_init(&TEST_BOARD, &ED097TC2, EPD_OPTIONS_DEFAULT); epd_poweron(); @@ -42,4 +44,6 @@ TEST_CASE("re-initialization works", "[epdiy,e2e]") epd_poweroff(); epd_deinit(); + int after_init = esp_get_free_internal_heap_size(); + TEST_ASSERT_EQUAL(after_init, before_init); } \ No newline at end of file