fix(event): event_send_core crash in special case. (#2807)

Add or delete event callback in lv_obj_event_base, the
address of event_dsc will change, causing crash.

Change-Id: I3085a077826e4c132f8f5088d31cad1d0ffd3b9f
This commit is contained in:
xaowang96
2021-11-19 22:32:42 +08:00
committed by GitHub
parent 9ced5a76ec
commit bfc428ecd1

View File

@@ -410,10 +410,11 @@ static lv_res_t event_send_core(lv_event_t * e)
if(indev_act->driver->feedback_cb) indev_act->driver->feedback_cb(indev_act->driver, e->code); if(indev_act->driver->feedback_cb) indev_act->driver->feedback_cb(indev_act->driver, e->code);
} }
lv_event_dsc_t * event_dsc = lv_obj_get_event_dsc(e->current_target, 0);
lv_res_t res = LV_RES_OK; lv_res_t res = LV_RES_OK;
res = lv_obj_event_base(NULL, e); res = lv_obj_event_base(NULL, e);
lv_event_dsc_t * event_dsc = lv_obj_get_event_dsc(e->current_target, 0);
uint32_t i = 0; uint32_t i = 0;
while(event_dsc && res == LV_RES_OK) { while(event_dsc && res == LV_RES_OK) {
if(event_dsc->cb && (event_dsc->filter == LV_EVENT_ALL || event_dsc->filter == e->code)) { if(event_dsc->cb && (event_dsc->filter == LV_EVENT_ALL || event_dsc->filter == e->code)) {