Re: [PATCH weston 3/8] libweston: Make weston_touch destruction safe

2018-01-31 Thread Pekka Paalanen
On Fri, 26 Jan 2018 18:47:57 +0200
Alexandros Frantzis  wrote:

> Ensure the server can safely handle client requests for wl_touch
> resources that have become inert due to a weston_touch object
> destruction.
> 
> This change involves, among other things, setting the weston_touch
> object, instead of the weston_seat object, as the user data for wl_touch
> resources. Although this is not strictly required at the moment (since
> no code is using the wl_touch user data), it makes the code safer:
> 
>  * It makes more sense conceptually.
>  * It is consistent with how wl_pointer resources are handled.
>  * It allows us to clear the user data during weston_touch
>destruction, so other code can check whether the resource is
>inert.
> 
> Signed-off-by: Alexandros Frantzis 
> ---
>  libweston/input.c | 14 --
>  1 file changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/libweston/input.c b/libweston/input.c
> index 96cabf25..48bcc55c 100644
> --- a/libweston/input.c
> +++ b/libweston/input.c
> @@ -1221,8 +1221,18 @@ weston_touch_create(void)
>  WL_EXPORT void
>  weston_touch_destroy(struct weston_touch *touch)
>  {
> - /* XXX: What about touch->resource_list? */
> + struct wl_resource *resource;
> +
> + wl_resource_for_each(resource, &touch->resource_list) {
> + wl_resource_set_user_data(resource, NULL);
> + }
> +
> + wl_resource_for_each(resource, &touch->focus_resource_list) {
> + wl_resource_set_user_data(resource, NULL);
> + }
>  
> + wl_list_remove(&touch->resource_list);
> + wl_list_remove(&touch->focus_resource_list);
>   wl_list_remove(&touch->focus_view_listener.link);
>   wl_list_remove(&touch->focus_resource_listener.link);
>   free(touch);
> @@ -2599,7 +2609,7 @@ seat_get_touch(struct wl_client *client, struct 
> wl_resource *resource,
>  wl_resource_get_link(cr));
>   }
>   wl_resource_set_implementation(cr, &touch_interface,
> -seat, unbind_resource);
> +touch, unbind_resource);
>  }
>  
>  static void

Reviewed-by: Pekka Paalanen 


Thanks,
pq


pgp8Gu2jqEGgI.pgp
Description: OpenPGP digital signature
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH weston 3/8] libweston: Make weston_touch destruction safe

2018-01-26 Thread Alexandros Frantzis
Ensure the server can safely handle client requests for wl_touch
resources that have become inert due to a weston_touch object
destruction.

This change involves, among other things, setting the weston_touch
object, instead of the weston_seat object, as the user data for wl_touch
resources. Although this is not strictly required at the moment (since
no code is using the wl_touch user data), it makes the code safer:

 * It makes more sense conceptually.
 * It is consistent with how wl_pointer resources are handled.
 * It allows us to clear the user data during weston_touch
   destruction, so other code can check whether the resource is
   inert.

Signed-off-by: Alexandros Frantzis 
---
 libweston/input.c | 14 --
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/libweston/input.c b/libweston/input.c
index 96cabf25..48bcc55c 100644
--- a/libweston/input.c
+++ b/libweston/input.c
@@ -1221,8 +1221,18 @@ weston_touch_create(void)
 WL_EXPORT void
 weston_touch_destroy(struct weston_touch *touch)
 {
-   /* XXX: What about touch->resource_list? */
+   struct wl_resource *resource;
+
+   wl_resource_for_each(resource, &touch->resource_list) {
+   wl_resource_set_user_data(resource, NULL);
+   }
+
+   wl_resource_for_each(resource, &touch->focus_resource_list) {
+   wl_resource_set_user_data(resource, NULL);
+   }
 
+   wl_list_remove(&touch->resource_list);
+   wl_list_remove(&touch->focus_resource_list);
wl_list_remove(&touch->focus_view_listener.link);
wl_list_remove(&touch->focus_resource_listener.link);
free(touch);
@@ -2599,7 +2609,7 @@ seat_get_touch(struct wl_client *client, struct 
wl_resource *resource,
   wl_resource_get_link(cr));
}
wl_resource_set_implementation(cr, &touch_interface,
-  seat, unbind_resource);
+  touch, unbind_resource);
 }
 
 static void
-- 
2.14.1

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel