[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