From: duna.oh Date: Thu, 22 Sep 2022 02:06:42 +0000 (+0900) Subject: tinyds: removes wl_listeners when it's destroied X-Git-Tag: accepted/tizen/unified/20230106.165108~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b1ecbab669ed1c57b91c9e3748846121020159ab;p=platform%2Fcore%2Fuifw%2Flibds-tizen.git tinyds: removes wl_listeners when it's destroied To fix segfault error, wl_listeners should be removed properly. Change-Id: Ida1a6c8c51eefa08932c22fb6296635532f3edb7 --- diff --git a/examples/tinyds-tdm.c b/examples/tinyds-tdm.c index a915c21..b64271e 100644 --- a/examples/tinyds-tdm.c +++ b/examples/tinyds-tdm.c @@ -288,11 +288,10 @@ struct tinyds_text_input { struct wl_list input_methods; - struct wl_listener destroy; struct wl_listener mgr_destroy; - struct wl_listener new_text_input; + struct wl_listener destroy; struct wl_listener text_input_activate; struct wl_listener text_input_deactivate; struct wl_listener text_input_reset; @@ -1946,22 +1945,10 @@ text_input_mgr_handle_destroy(struct wl_listener *listener, void *data) text_input = wl_container_of(listener, text_input, mgr_destroy); wl_list_remove(&text_input->mgr_destroy.link); - wl_list_remove(&text_input->destroy.link); - wl_list_remove(&text_input->new_text_input.link); - wl_list_remove(&text_input->text_input_activate.link); - wl_list_remove(&text_input->text_input_deactivate.link); - wl_list_remove(&text_input->text_input_reset.link); - wl_list_remove(&text_input->text_input_set_content_type.link); - wl_list_remove(&text_input->text_input_invoke_action.link); - wl_list_remove(&text_input->text_input_commit_state.link); - wl_list_remove(&text_input->text_input_set_preferred_language.link); - server = text_input->server; server->text_input = NULL; - - free(text_input); } static void @@ -1974,6 +1961,15 @@ text_input_handle_destroy(struct wl_listener *listener, void *data) text_input = wl_container_of(listener, text_input, destroy); wl_list_remove(&text_input->destroy.link); + wl_list_remove(&text_input->text_input_activate.link); + wl_list_remove(&text_input->text_input_deactivate.link); + wl_list_remove(&text_input->text_input_reset.link); + wl_list_remove(&text_input->text_input_set_content_type.link); + wl_list_remove(&text_input->text_input_invoke_action.link); + wl_list_remove(&text_input->text_input_commit_state.link); + wl_list_remove(&text_input->text_input_set_preferred_language.link); + + free(text_input); } static void @@ -2450,9 +2446,9 @@ add_new_text_input(struct tinyds_server *server) wl_list_init(&text_input->input_methods); - text_input->destroy.notify = text_input_mgr_handle_destroy; + text_input->mgr_destroy.notify = text_input_mgr_handle_destroy; ds_tizen_text_input_manager_add_destroy_listener(text_input->text_input_mgr, - &text_input->destroy); + &text_input->mgr_destroy); text_input->new_text_input.notify = text_input_mgr_handle_new_text_input; ds_tizen_text_input_manager_add_new_text_input_listener(text_input->text_input_mgr, @@ -2595,6 +2591,7 @@ visibility_handle_destroy(struct wl_listener *listener, void *data) ds_inf("Policy Visibility(%p) destroy", visibility); + wl_list_remove(&visibility->destroy.link); wl_list_remove(&visibility->link); free(visibility); } @@ -2608,6 +2605,8 @@ position_handle_destroy(struct wl_listener *listener, void *data) ds_inf("Policy Position(%p) destroy", position); + wl_list_remove(&position->destroy.link); + wl_list_remove(&position->set.link); wl_list_remove(&position->link); free(position); } @@ -2633,6 +2632,7 @@ subsurface_watcher_handle_destroy(struct wl_listener *listener, void *data) ds_inf("Policy Subsurface_Watcher(%p) destroy", subsurface_watcher); + wl_list_remove(&subsurface_watcher->destroy.link); wl_list_remove(&subsurface_watcher->link); free(subsurface_watcher); } @@ -2646,6 +2646,38 @@ policy_surface_handle_destroy(struct wl_listener *listener, void *data) ds_inf("Policy Info(%p) destroy", policy_surface); + wl_list_remove(&policy_surface->destroy.link); + wl_list_remove(&policy_surface->new_visibility.link); + wl_list_remove(&policy_surface->new_position.link); + wl_list_remove(&policy_surface->activate.link); + wl_list_remove(&policy_surface->raise.link); + wl_list_remove(&policy_surface->lower.link); + wl_list_remove(&policy_surface->set_focus_skip.link); + wl_list_remove(&policy_surface->unset_focus_skip.link); + wl_list_remove(&policy_surface->set_role.link); + wl_list_remove(&policy_surface->set_window_type.link); + wl_list_remove(&policy_surface->set_conformant.link); + wl_list_remove(&policy_surface->unset_conformant.link); + wl_list_remove(&policy_surface->get_conformant.link); + wl_list_remove(&policy_surface->set_notification_level.link); + wl_list_remove(&policy_surface->set_window_screen_mode.link); + wl_list_remove(&policy_surface->get_subsurface.link); + wl_list_remove(&policy_surface->iconify.link); + wl_list_remove(&policy_surface->uniconify.link); + wl_list_remove(&policy_surface->add_aux_hint.link); + wl_list_remove(&policy_surface->change_aux_hint.link); + wl_list_remove(&policy_surface->delete_aux_hint.link); + wl_list_remove(&policy_surface->get_supported_aux_hints.link); + wl_list_remove(&policy_surface->set_floating_mode.link); + wl_list_remove(&policy_surface->unset_floating_mode.link); + wl_list_remove(&policy_surface->set_stack_mode.link); + wl_list_remove(&policy_surface->new_subsurface_watcher.link); + wl_list_remove(&policy_surface->set_parent.link); + wl_list_remove(&policy_surface->ack_conformant_region.link); + wl_list_remove(&policy_surface->set_video.link); + wl_list_remove(&policy_surface->show.link); + wl_list_remove(&policy_surface->hide.link); + wl_list_remove(&policy_surface->set_parent_with_below.link); wl_list_remove(&policy_surface->link); free(policy_surface); } @@ -3074,6 +3106,20 @@ policy_handle_destroy(struct wl_listener *listener, void *data) ds_inf("Policy(%p) destroy", policy); + wl_list_remove(&policy->destroy.link); + wl_list_remove(&policy->new_surface.link); + wl_list_remove(&policy->activate_below_by_univeral_id.link); + wl_list_remove(&policy->lower_by_universal_id.link); + wl_list_remove(&policy->set_transient_for.link); + wl_list_remove(&policy->unset_transient_for.link); + wl_list_remove(&policy->place_subsurface_below_parent.link); + wl_list_remove(&policy->set_subsurface_stand_alone.link); + wl_list_remove(&policy->set_background_state.link); + wl_list_remove(&policy->unset_background_state.link); + wl_list_remove(&policy->add_activate_above_by_universal_id.link); + wl_list_remove(&policy->set_appid.link); + wl_list_remove(&policy->set_transient_for_below.link); + free(policy); } @@ -3422,7 +3468,7 @@ new_policy(struct tinyds_server *server) policy->set_background_state.notify = policy_handle_set_background_state; ds_tizen_policy_add_set_background_state_listener(policy->policy, - &policy->destroy); + &policy->set_background_state); policy->unset_background_state.notify = policy_handle_unset_background_state; ds_tizen_policy_add_unset_background_state_listener(policy->policy,