1*4882a593SmuzhiyunFrom 4744081f6a23e934097a8ce3a19dc80bc909a76e Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Fri, 9 Oct 2020 18:00:11 +0800 4*4882a593SmuzhiyunSubject: [PATCH 29/79] libweston: animation: Fix double-destroy 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7*4882a593Smuzhiyun--- 8*4882a593Smuzhiyun libweston/animation.c | 9 ++++++++- 9*4882a593Smuzhiyun 1 file changed, 8 insertions(+), 1 deletion(-) 10*4882a593Smuzhiyun 11*4882a593Smuzhiyundiff --git a/libweston/animation.c b/libweston/animation.c 12*4882a593Smuzhiyunindex f11754c..b228558 100644 13*4882a593Smuzhiyun--- a/libweston/animation.c 14*4882a593Smuzhiyun+++ b/libweston/animation.c 15*4882a593Smuzhiyun@@ -136,6 +136,7 @@ struct weston_view_animation { 16*4882a593Smuzhiyun weston_view_animation_frame_func_t frame; 17*4882a593Smuzhiyun weston_view_animation_frame_func_t reset; 18*4882a593Smuzhiyun weston_view_animation_done_func_t done; 19*4882a593Smuzhiyun+ struct wl_event_source *idle_destroy_source; 20*4882a593Smuzhiyun void *data; 21*4882a593Smuzhiyun void *private; 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun@@ -143,6 +144,9 @@ struct weston_view_animation { 24*4882a593Smuzhiyun WL_EXPORT void 25*4882a593Smuzhiyun weston_view_animation_destroy(struct weston_view_animation *animation) 26*4882a593Smuzhiyun { 27*4882a593Smuzhiyun+ if (animation->idle_destroy_source) 28*4882a593Smuzhiyun+ wl_event_source_remove(animation->idle_destroy_source); 29*4882a593Smuzhiyun+ 30*4882a593Smuzhiyun wl_list_remove(&animation->animation.link); 31*4882a593Smuzhiyun wl_list_remove(&animation->listener.link); 32*4882a593Smuzhiyun wl_list_remove(&animation->transform.link); 33*4882a593Smuzhiyun@@ -248,10 +252,13 @@ weston_view_animation_create(struct weston_view *view, 34*4882a593Smuzhiyun if (view->output) { 35*4882a593Smuzhiyun wl_list_insert(&view->output->animation_list, 36*4882a593Smuzhiyun &animation->animation.link); 37*4882a593Smuzhiyun+ animation->idle_destroy_source = NULL; 38*4882a593Smuzhiyun } else { 39*4882a593Smuzhiyun wl_list_init(&animation->animation.link); 40*4882a593Smuzhiyun loop = wl_display_get_event_loop(ec->wl_display); 41*4882a593Smuzhiyun- wl_event_loop_add_idle(loop, idle_animation_destroy, animation); 42*4882a593Smuzhiyun+ animation->idle_destroy_source = 43*4882a593Smuzhiyun+ wl_event_loop_add_idle(loop, idle_animation_destroy, 44*4882a593Smuzhiyun+ animation); 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun return animation; 48*4882a593Smuzhiyun-- 49*4882a593Smuzhiyun2.20.1 50*4882a593Smuzhiyun 51