[PATCH 1/2] server: add wl_input_device_fini()

Kristian Høgsberg krh at bitplanet.net
Tue Jan 3 08:26:54 PST 2012


On Tue, Jan 3, 2012 at 9:32 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> Add a clean-up function for destroying all objects created in
> wl_input_device_init(). Can be used to fix memory leaks reported by
> Valgrind in the demos.
>
> The init function was also missing an explicit initialisation of the
> 'keys' array. Add the explicit array init, although it is redundant with
> the zeroing of the whole struct.

Looks good, but I edited it a bit to rename the function to
wl_input_device_release.  We don't have a lot of precedent for this,
most cases are create/destroy, but in case of initializing/releasing
resources for a base class I'd like to go with init/release.

Kristian

> Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> ---
>  src/wayland-server.c |   15 +++++++++++++++
>  src/wayland-server.h |    3 +++
>  2 files changed, 18 insertions(+), 0 deletions(-)
>
> diff --git a/src/wayland-server.c b/src/wayland-server.c
> index 89e8a81..0b81706 100644
> --- a/src/wayland-server.c
> +++ b/src/wayland-server.c
> @@ -411,6 +411,7 @@ wl_input_device_init(struct wl_input_device *device)
>  {
>        memset(device, 0, sizeof *device);
>        wl_list_init(&device->resource_list);
> +       wl_array_init(&device->keys);
>        device->pointer_focus_listener.func = lose_pointer_focus;
>        device->keyboard_focus_listener.func = lose_keyboard_focus;
>
> @@ -418,6 +419,20 @@ wl_input_device_init(struct wl_input_device *device)
>        device->y = 100;
>  }
>
> +WL_EXPORT void
> +wl_input_device_fini(struct wl_input_device *device)
> +{
> +       if (device->keyboard_focus_resource)
> +               wl_list_remove(&device->keyboard_focus_listener.link);
> +
> +       if (device->pointer_focus_resource)
> +               wl_list_remove(&device->pointer_focus_listener.link);
> +
> +       /* XXX: What about device->resource_list? */
> +
> +       wl_array_release(&device->keys);
> +}
> +
>  static struct wl_resource *
>  find_resource_for_surface(struct wl_list *list, struct wl_surface *surface)
>  {
> diff --git a/src/wayland-server.h b/src/wayland-server.h
> index 5176a09..f62c860 100644
> --- a/src/wayland-server.h
> +++ b/src/wayland-server.h
> @@ -223,6 +223,9 @@ void
>  wl_input_device_init(struct wl_input_device *device);
>
>  void
> +wl_input_device_fini(struct wl_input_device *device);
> +
> +void
>  wl_input_device_set_pointer_focus(struct wl_input_device *device,
>                                  struct wl_surface *surface,
>                                  uint32_t time,
> --
> 1.7.3.4
>


More information about the wayland-devel mailing list