[PATCH libinput 1/3] Make ref count unref/ref() functions return resulting object pointer

Jonas Ådahl jadahl at gmail.com
Tue Jun 24 15:06:57 PDT 2014


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>
---

See patch 2 in this series for context.


Jonas



 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



More information about the wayland-devel mailing list