From b3e7f6d0e37ec681e522cfd79108c9ab9a3917c2 Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Fri, 23 Apr 2021 00:41:53 +0200 Subject: [PATCH] Patch memory leak --- src/hasp/hasp_event.cpp | 11 +++++++++++ src/hasp/hasp_event.h | 1 + src/hasp/hasp_object.cpp | 27 ++++++++++++++++++--------- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index ca254cd6..7e546f5f 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -555,3 +555,14 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) // dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); } + +/** + * Called when an object is deleted + * @param obj pointer to a generic object + * @param event type of event that occured + */ +void deleted_event_handler(lv_obj_t* obj, lv_event_t event) +{ + uint8_t hasp_event_id; + translate_event(obj, event, hasp_event_id); +} \ No newline at end of file diff --git a/src/hasp/hasp_event.h b/src/hasp/hasp_event.h index 9b82950a..b113575f 100644 --- a/src/hasp/hasp_event.h +++ b/src/hasp/hasp_event.h @@ -18,6 +18,7 @@ void slider_event_handler(lv_obj_t* obj, lv_event_t event); void selector_event_handler(lv_obj_t* obj, lv_event_t event); void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event); void cpicker_event_handler(lv_obj_t* obj, lv_event_t event); +void deleted_event_handler(lv_obj_t* obj, lv_event_t event); #if HASP_USE_GPIO > 0 void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index f1c09788..c6beef08 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -489,16 +489,20 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) case LV_HASP_PAGE: case HASP_OBJ_PAGE: obj = lv_page_create(parent_obj, NULL); - if(obj) obj->user_data.objid = LV_HASP_PAGE; - // No event handler for pages + if(obj) { + obj->user_data.objid = LV_HASP_PAGE; + lv_obj_set_event_cb(obj, deleted_event_handler); // Needed for memory dealocation + } break; #if LV_USE_WIN && LVGL_VERSION_MAJOR == 7 case LV_HASP_WINDOW: case HASP_OBJ_WIN: obj = lv_win_create(parent_obj, NULL); - if(obj) obj->user_data.objid = LV_HASP_WINDOW; - // No event handler for pages + if(obj) { + obj->user_data.objid = LV_HASP_WINDOW; + lv_obj_set_event_cb(obj, deleted_event_handler); // Needed for memory dealocation + } break; #endif @@ -550,16 +554,18 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) case LV_HASP_TILEVIEW: case HASP_OBJ_TILEVIEW: obj = lv_tileview_create(parent_obj, NULL); - if(obj) obj->user_data.objid = LV_HASP_TILEVIEW; - - // No event handler for tileviews + if(obj) { + obj->user_data.objid = LV_HASP_TILEVIEW; + lv_obj_set_event_cb(obj, deleted_event_handler); // Needed for memory dealocation + } break; case LV_HASP_TABVIEW: case HASP_OBJ_TABVIEW: obj = lv_tabview_create(parent_obj, NULL); - // No event handler for tabs if(obj) { + lv_obj_set_event_cb(obj, deleted_event_handler); // Needed for memory dealocation + lv_obj_t* tab; tab = lv_tabview_add_tab(obj, "tab 1"); // lv_obj_set_user_data(tab, id + 1); @@ -587,7 +593,10 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) case LV_HASP_SPINNER: case HASP_OBJ_SPINNER: obj = lv_spinner_create(parent_obj, NULL); - if(obj) obj->user_data.objid = LV_HASP_SPINNER; + if(obj) { + obj->user_data.objid = LV_HASP_SPINNER; + lv_obj_set_event_cb(obj, deleted_event_handler); // Needed for memory dealocation + } break; #endif