[PATCH libinput 1/3] Make ref count unref/ref() functions return resulting object pointer
Peter Hutterer
peter.hutterer at who-t.net
Tue Jun 24 17:56:24 PDT 2014
On Wed, Jun 25, 2014 at 12:06:57AM +0200, Jonas Ådahl wrote:
> In order to know if an unref() destroyed an object and to allow more
> convenient use of ref(), make both functions return a pointer to the
> object it was passed, or NULL if that object was destroyed.
>
> Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
> ---
thanks, I've merged all three locally. will push it together with the couple
of other API breaks/changes I have already accumulated here so we only break
things once.
Cheers,
Peter
> src/libinput.c | 22 ++++++++++++++++------
> src/libinput.h | 12 ++++++++----
> 2 files changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/src/libinput.c b/src/libinput.c
> index c4f7fe1..d4d5711 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -607,10 +607,11 @@ libinput_seat_init(struct libinput_seat *seat,
> list_insert(&libinput->seat_list, &seat->link);
> }
>
> -LIBINPUT_EXPORT void
> +LIBINPUT_EXPORT struct libinput_seat *
> libinput_seat_ref(struct libinput_seat *seat)
> {
> seat->refcount++;
> + return seat;
> }
>
> static void
> @@ -622,13 +623,17 @@ libinput_seat_destroy(struct libinput_seat *seat)
> seat->destroy(seat);
> }
>
> -LIBINPUT_EXPORT void
> +LIBINPUT_EXPORT struct libinput_seat *
> libinput_seat_unref(struct libinput_seat *seat)
> {
> assert(seat->refcount > 0);
> seat->refcount--;
> - if (seat->refcount == 0)
> + if (seat->refcount == 0) {
> libinput_seat_destroy(seat);
> + return NULL;
> + } else {
> + return seat;
> + }
> }
>
> LIBINPUT_EXPORT void
> @@ -663,10 +668,11 @@ libinput_device_init(struct libinput_device *device,
> device->refcount = 1;
> }
>
> -LIBINPUT_EXPORT void
> +LIBINPUT_EXPORT struct libinput_device *
> libinput_device_ref(struct libinput_device *device)
> {
> device->refcount++;
> + return device;
> }
>
> static void
> @@ -675,13 +681,17 @@ libinput_device_destroy(struct libinput_device *device)
> evdev_device_destroy((struct evdev_device *) device);
> }
>
> -LIBINPUT_EXPORT void
> +LIBINPUT_EXPORT struct libinput_device *
> libinput_device_unref(struct libinput_device *device)
> {
> assert(device->refcount > 0);
> device->refcount--;
> - if (device->refcount == 0)
> + if (device->refcount == 0) {
> libinput_device_destroy(device);
> + return NULL;
> + } else {
> + return device;
> + }
> }
>
> LIBINPUT_EXPORT int
> diff --git a/src/libinput.h b/src/libinput.h
> index b1b1124..3503b76 100644
> --- a/src/libinput.h
> +++ b/src/libinput.h
> @@ -1080,8 +1080,9 @@ libinput_log_set_handler(libinput_log_handler log_handler,
> * the seat correctly to avoid dangling pointers.
> *
> * @param seat A previously obtained seat
> + * @return The passed seat
> */
> -void
> +struct libinput_seat *
> libinput_seat_ref(struct libinput_seat *seat);
>
> /**
> @@ -1093,8 +1094,9 @@ libinput_seat_ref(struct libinput_seat *seat);
> * the seat correctly to avoid dangling pointers.
> *
> * @param seat A previously obtained seat
> + * @return NULL if seat was destroyed, otherwise the passed seat
> */
> -void
> +struct libinput_seat *
> libinput_seat_unref(struct libinput_seat *seat);
>
> /**
> @@ -1167,8 +1169,9 @@ libinput_seat_get_logical_name(struct libinput_seat *seat);
> * the device correctly to avoid dangling pointers.
> *
> * @param device A previously obtained device
> + * @return The passed device
> */
> -void
> +struct libinput_device *
> libinput_device_ref(struct libinput_device *device);
>
> /**
> @@ -1180,8 +1183,9 @@ libinput_device_ref(struct libinput_device *device);
> * the device correctly to avoid dangling pointers.
> *
> * @param device A previously obtained device
> + * @return NULL if device was destroyed, otherwise the passed device
> */
> -void
> +struct libinput_device *
> libinput_device_unref(struct libinput_device *device);
>
> /**
> --
> 1.9.1
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
More information about the wayland-devel
mailing list