1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

fix(sdl): fix memory leak and double free (#4892)

Signed-off-by: Xu Xingliang <xuxingliang@xiaomi.com>
This commit is contained in:
Neo Xu 2023-11-30 20:26:40 +08:00 committed by GitHub
parent 0233247406
commit ddd61d9476
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 6 deletions

View File

@ -57,8 +57,7 @@ lv_indev_t * lv_sdl_keyboard_create(void)
lv_indev_set_type(indev, LV_INDEV_TYPE_KEYPAD);
lv_indev_set_read_cb(indev, sdl_keyboard_read);
lv_indev_set_driver_data(indev, dsc);
lv_timer_delete(lv_indev_get_read_timer(indev));
lv_indev_delete_read_timer(indev);
lv_indev_add_event_cb(indev, release_indev_cb, LV_EVENT_DELETE, indev);
return indev;

View File

@ -58,7 +58,7 @@ lv_indev_t * lv_sdl_mouse_create(void)
lv_indev_set_read_cb(indev, sdl_mouse_read);
lv_indev_set_driver_data(indev, dsc);
lv_timer_delete(lv_indev_get_read_timer(indev));
lv_indev_delete_read_timer(indev);
lv_indev_add_event_cb(indev, release_indev_cb, LV_EVENT_DELETE, indev);
return indev;

View File

@ -53,7 +53,7 @@ lv_indev_t * lv_sdl_mousewheel_create(void)
lv_indev_set_read_cb(indev, sdl_mousewheel_read);
lv_indev_set_driver_data(indev, dsc);
lv_timer_delete(lv_indev_get_read_timer(indev));
lv_indev_delete_read_timer(indev);
lv_indev_add_event_cb(indev, release_indev_cb, LV_EVENT_DELETE, indev);
return indev;

View File

@ -12,6 +12,7 @@
#include "../../core/lv_refr.h"
#include "../../stdlib/lv_string.h"
#include "../../core/lv_global.h"
#include "../../lv_init.h"
#define SDL_MAIN_HANDLED /*To fix SDL's "undefined reference to WinMain" issue*/
#include LV_SDL_INCLUDE_PATH
@ -173,6 +174,7 @@ void lv_sdl_quit()
if(inited) {
SDL_Quit();
lv_timer_delete(event_handler_timer);
event_handler_timer = NULL;
inited = false;
}
}
@ -254,7 +256,7 @@ static void sdl_event_handler(lv_timer_t * t)
}
if(event.type == SDL_QUIT) {
SDL_Quit();
lv_timer_delete(event_handler_timer);
lv_deinit();
inited = false;
#if LV_SDL_DIRECT_EXIT
exit(0);
@ -373,7 +375,8 @@ static void release_disp_cb(lv_event_t * e)
SDL_DestroyTexture(dsc->texture);
SDL_DestroyRenderer(dsc->renderer);
SDL_DestroyWindow(dsc->window);
if(dsc->fb1) lv_free(dsc->fb1);
if(dsc->fb2) lv_free(dsc->fb2);
lv_free(dsc);
lv_display_set_driver_data(disp, NULL);
}