From c1bb621b5957060b18a53e36c607b3c968306aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 18 Jun 2026 14:34:47 +0200 Subject: [PATCH] mafpmoc: Fix error handling --- libfprint/drivers/mafpmoc/mafpmoc.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/libfprint/drivers/mafpmoc/mafpmoc.c b/libfprint/drivers/mafpmoc/mafpmoc.c index 04bdfb35..40f1d6ff 100644 --- a/libfprint/drivers/mafpmoc/mafpmoc.c +++ b/libfprint/drivers/mafpmoc/mafpmoc.c @@ -1094,7 +1094,7 @@ mafp_pwr_btn_shield_on_cb (FpiUsbTransfer *transfer, static void mafp_pwr_btn_shield_on (FpiDeviceMafpmoc *self, int on) { - g_autoptr(GError) pre_error = fpi_ssm_get_error (self->task_ssm); + GError *pre_error = fpi_ssm_get_error (self->task_ssm); if (g_error_matches (pre_error, G_USB_DEVICE_ERROR, G_USB_DEVICE_ERROR_FAILED)) { @@ -2442,31 +2442,29 @@ mafp_cancel (FpDevice *device) fp_dbg ("mafp_cancel"); } -static void +static gboolean mafp_release_interface (FpiDeviceMafpmoc *self, - GError *error) + GError **error) { - g_autoptr(GError) release_error = NULL; - g_free (self->serial_number); - g_free (self->enroll_user_id); - /* Release usb interface */ - g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (self)), - 0, 0, &release_error); - /* Retain passed error if set, otherwise propagate error from release. */ - if (error == NULL) - error = g_steal_pointer (&release_error); - /* Notify close complete */ - fpi_device_close_complete (FP_DEVICE (self), error); + return g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (self)), + 0, 0, error); } static void mafp_exit (FpDevice *device) { + g_autoptr(GError) error = NULL; + fp_dbg ("mafp_exit"); FpiDeviceMafpmoc *self = FPI_DEVICE_MAFPMOC (device); - mafp_release_interface (self, NULL); + mafp_release_interface (self, &error); + fpi_device_close_complete (FP_DEVICE (self), error); + + g_clear_pointer (&self->serial_number, g_free); + g_clear_pointer (&self->enroll_user_id, g_free); + g_clear_pointer (&self->templates, g_free); } static void