From 4c30fafc6e402d5f7f6a3f459598189c5de195ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Thu, 22 Apr 2021 11:33:15 +0200 Subject: [PATCH] fbd-dev-leds: Use automatic deep cleanup for device list The current logic was fragile and failed e.g. when the FEEDBACKD_UDEV_VAL_LED would not match leaking the dev since the g_object_unref() at the end of the loop was never hit. Prevent that with automatic cleanup and explicitly ref'ing the devs we want to use. --- src/fbd-dev-leds.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/fbd-dev-leds.c b/src/fbd-dev-leds.c index 03fc19b..f66c8e1 100644 --- a/src/fbd-dev-leds.c +++ b/src/fbd-dev-leds.c @@ -94,8 +94,7 @@ initable_init (GInitable *initable, { const gchar * const subsystems[] = { LED_SUBSYSTEM, NULL }; FbdDevLeds *self = FBD_DEV_LEDS (initable); - - g_autoptr (GList) leds; + g_autolist (GUdevDevice) leds = NULL; gboolean found = FALSE; self->client = g_udev_client_new (subsystems); @@ -132,7 +131,7 @@ initable_init (GInitable *initable, continue; led = g_malloc0 (sizeof(FbdDevLed)); - led->dev = dev; + led->dev = g_object_ref (dev); led->color = i; led->max_brightness = brightness; path = g_udev_device_get_sysfs_path (dev); @@ -142,9 +141,6 @@ initable_init (GInitable *initable, break; } } - - if (!led) - g_object_unref (dev); } /* TODO: listen for new leds via udev events */