From: Yu Watanabe Date: Sat, 26 Apr 2025 06:37:11 +0000 (+0900) Subject: udev: introduce event_freep() and use it as cleanup attribute X-Git-Tag: v258-rc1~654^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e962ebbe7228c3d2d3589db0e181aa0d9e445238;p=thirdparty%2Fsystemd.git udev: introduce event_freep() and use it as cleanup attribute No functional change, just refactoring and preparation for later change. --- diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 2ad47258f71..259321e29d2 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -94,21 +94,23 @@ static Event* event_free(Event *event) { if (!event) return NULL; - assert(event->manager); + if (event->manager) + LIST_REMOVE(event, event->manager->events, event); + + if (event->worker) + event->worker->event = NULL; - LIST_REMOVE(event, event->manager->events, event); sd_device_unref(event->dev); sd_event_source_unref(event->retry_event_source); sd_event_source_unref(event->timeout_warning_event); sd_event_source_unref(event->timeout_event); - if (event->worker) - event->worker->event = NULL; - return mfree(event); } +DEFINE_TRIVIAL_CLEANUP_FUNC(Event*, event_free); + static Worker* worker_free(Worker *worker) { if (!worker) return NULL; @@ -828,7 +830,6 @@ static int event_queue_insert(Manager *manager, sd_device *dev) { const char *devpath, *devpath_old = NULL, *id = NULL, *devnode = NULL; sd_device_action_t action; uint64_t seqnum; - Event *event; int r; assert(manager); @@ -859,12 +860,11 @@ static int event_queue_insert(Manager *manager, sd_device *dev) { if (r < 0 && r != -ENOENT) return r; - event = new(Event, 1); + _cleanup_(event_freep) Event *event = new(Event, 1); if (!event) return -ENOMEM; *event = (Event) { - .manager = manager, .dev = sd_device_ref(dev), .seqnum = seqnum, .action = action, @@ -876,6 +876,8 @@ static int event_queue_insert(Manager *manager, sd_device *dev) { }; LIST_APPEND(event, manager->events, event); + event->manager = manager; + TAKE_PTR(event); log_device_uevent(dev, "Device is queued"); if (!manager->queue_file_created) {