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:
parent
0233247406
commit
ddd61d9476
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user