1*4882a593SmuzhiyunFrom ae77bfe5037c8e8331fe9818e924ad18a3d480bf 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 32/93] 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