]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: introduce event_freep() and use it as cleanup attribute
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 26 Apr 2025 06:37:11 +0000 (15:37 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 9 May 2025 15:26:32 +0000 (00:26 +0900)
No functional change, just refactoring and preparation for later change.

src/udev/udev-manager.c

index 2ad47258f71d1167c6680238616a3700aa5c3739..259321e29d24be41e53c53dff1f96575d0a9edfa 100644 (file)
@@ -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) {