From 130c3bcf6361a76a889790e1907b78c607053659 Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Fri, 11 Feb 2022 09:06:26 -0500 Subject: [PATCH] types/wlr_input_device: call the specialized input device destroy function on destroy In case the `wlr_input_device` is not owned by a specialized input device, the function will finish the wlr_input_device and call it's implementation destroy function if an implementation has been supplied, or simply free it. --- include/wlr/interfaces/wlr_input_device.h | 6 ++++++ types/wlr_input_device.c | 20 +++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/wlr/interfaces/wlr_input_device.h b/include/wlr/interfaces/wlr_input_device.h index de527393..ab314807 100644 --- a/include/wlr/interfaces/wlr_input_device.h +++ b/include/wlr/interfaces/wlr_input_device.h @@ -25,6 +25,12 @@ void wlr_input_device_init(struct wlr_input_device *wlr_device, */ void wlr_input_device_finish(struct wlr_input_device *wlr_device); +/** + * Calls the specialized input device destroy function. + * If the wlr_input_device is not owned by a specialized input device, the + * function will finish the wlr_input_device, and either call its implementation + * destroy function if one has been given, or free the wlr_input_device. + */ void wlr_input_device_destroy(struct wlr_input_device *dev); #endif diff --git a/types/wlr_input_device.c b/types/wlr_input_device.c index 50afdaff..8056556b 100644 --- a/types/wlr_input_device.c +++ b/types/wlr_input_device.c @@ -41,8 +41,6 @@ void wlr_input_device_destroy(struct wlr_input_device *dev) { return; } - wlr_signal_emit_safe(&dev->events.destroy, dev); - if (dev->_device) { switch (dev->type) { case WLR_INPUT_DEVICE_KEYBOARD: @@ -63,17 +61,13 @@ void wlr_input_device_destroy(struct wlr_input_device *dev) { case WLR_INPUT_DEVICE_TABLET_PAD: wlr_tablet_pad_destroy(dev->tablet_pad); break; - default: - wlr_log(WLR_DEBUG, "Warning: leaking memory %p %p %d", - dev->_device, dev, dev->type); - break; + } + } else { + wlr_input_device_finish(dev); + if (dev->impl && dev->impl->destroy) { + dev->impl->destroy(dev); + } else { + free(dev); } } - free(dev->name); - free(dev->output_name); - if (dev->impl && dev->impl->destroy) { - dev->impl->destroy(dev); - } else { - free(dev); - } }