]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: introduce reference counter for UdevEvent
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 4 Dec 2024 18:12:03 +0000 (03:12 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 15 Dec 2024 00:20:45 +0000 (09:20 +0900)
No functional change, preparation for later commits.

src/udev/test-udev-rule-runner.c
src/udev/test-udev-spawn.c
src/udev/udev-event.c
src/udev/udev-event.h
src/udev/udev-worker.c
src/udev/udevadm-test-builtin.c
src/udev/udevadm-test.c

index d123c8ad1b21ac76a4648e0e75b8d82abf8fa483..9a04abf5904b7e0b6c7620d2d7bab77e0bc0bc75 100644 (file)
@@ -89,7 +89,7 @@ static int fake_filesystems(void) {
 
 static int run(int argc, char *argv[]) {
         _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
-        _cleanup_(udev_event_freep) UdevEvent *event = NULL;
+        _cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         const char *devpath, *devname, *action;
         int r;
index b9674f955313d587ba63d22fe7dbdefb0dfbdff2..b4e020cea6cefef08a19828da2cce15dad19bc0a 100644 (file)
@@ -12,7 +12,7 @@
 
 static void test_event_spawn_core(bool with_pidfd, const char *cmd, char *result_buf, size_t buf_size) {
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
-        _cleanup_(udev_event_freep) UdevEvent *event = NULL;
+        _cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
 
         ASSERT_OK_ERRNO(setenv("SYSTEMD_PIDFD", yes_no(with_pidfd), 1));
 
index 9141a9d2a79fba00c64eeb3403006d45fcdea86b..6a7c34b1628379acc6bb1f8939d3339a09ddc641 100644 (file)
@@ -29,6 +29,7 @@ UdevEvent* udev_event_new(sd_device *dev, UdevWorker *worker, EventMode mode) {
                 return NULL;
 
         *event = (UdevEvent) {
+                .n_ref = 1,
                 .worker = worker,
                 .rtnl = worker ? sd_netlink_ref(worker->rtnl) : NULL,
                 .dev = sd_device_ref(dev),
@@ -44,7 +45,7 @@ UdevEvent* udev_event_new(sd_device *dev, UdevWorker *worker, EventMode mode) {
         return event;
 }
 
-UdevEvent* udev_event_free(UdevEvent *event) {
+static UdevEvent* udev_event_free(UdevEvent *event) {
         if (!event)
                 return NULL;
 
@@ -60,6 +61,8 @@ UdevEvent* udev_event_free(UdevEvent *event) {
         return mfree(event);
 }
 
+DEFINE_TRIVIAL_REF_UNREF_FUNC(UdevEvent, udev_event, udev_event_free);
+
 static int device_rename(sd_device *device, const char *name) {
         _cleanup_free_ char *new_syspath = NULL;
         const char *s;
index 873e7ca421a8932d96b039b94f1138161daa3769..b1ad2bf0c2f7f8079dd1c63074a7289ae8b1aba1 100644 (file)
@@ -21,9 +21,10 @@ typedef struct UdevRules UdevRules;
 typedef struct UdevWorker UdevWorker;
 
 typedef struct UdevEvent {
+        unsigned n_ref;
+
         UdevWorker *worker;
         sd_netlink *rtnl;
-
         sd_device *dev;
         sd_device *dev_parent;
         sd_device *dev_db_clone;
@@ -53,8 +54,9 @@ typedef struct UdevEvent {
 } UdevEvent;
 
 UdevEvent* udev_event_new(sd_device *dev, UdevWorker *worker, EventMode mode);
-UdevEvent* udev_event_free(UdevEvent *event);
-DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_free);
+UdevEvent* udev_event_ref(UdevEvent *event);
+UdevEvent* udev_event_unref(UdevEvent *event);
+DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_unref);
 
 int udev_event_execute_rules(UdevEvent *event, UdevRules *rules);
 
index 28cf26f1eaf15ecc8f6f1456064a6f486c6a2823..ee5831f66f9813e57e0adaaef2f834374bb6f8f0 100644 (file)
@@ -170,7 +170,7 @@ static int worker_mark_block_device_read_only(sd_device *dev) {
 }
 
 static int worker_process_device(UdevWorker *worker, sd_device *dev) {
-        _cleanup_(udev_event_freep) UdevEvent *udev_event = NULL;
+        _cleanup_(udev_event_unrefp) UdevEvent *udev_event = NULL;
         _cleanup_close_ int fd_lock = -EBADF;
         int r;
 
index 5815f2cc781ae7b181d9d97b61cde994b1183f84..382897efd46e4fcde85bbf188a0b441a4cc9d03f 100644 (file)
@@ -74,7 +74,7 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 int builtin_main(int argc, char *argv[], void *userdata) {
-        _cleanup_(udev_event_freep) UdevEvent *event = NULL;
+        _cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         UdevBuiltinCommand cmd;
         int r;
index 48714de33bcc47d658e68b0b75fb75ed4101ab97..0c2bc3438b681f0fbe32e65d834e82d918f7b104 100644 (file)
@@ -93,7 +93,7 @@ static int parse_argv(int argc, char *argv[]) {
 
 int test_main(int argc, char *argv[], void *userdata) {
         _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
-        _cleanup_(udev_event_freep) UdevEvent *event = NULL;
+        _cleanup_(udev_event_unrefp) UdevEvent *event = NULL;
         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         sigset_t mask, sigmask_orig;
         int r;