diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-09-12 23:40:34 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-12 23:40:34 +0900 |
commit | 75a5a143bbf8e29d4b57e7731438d0906129c988 (patch) | |
tree | 01135f2bd30936c7c60120c620f872bee889aede /src/udev/udevd.c | |
parent | 4167e2135e0df7ce21820107e73492bb749280b9 (diff) | |
parent | 1055172804e660df2e1c498dafa998ffd65e0c88 (diff) | |
download | systemd-75a5a143bbf8e29d4b57e7731438d0906129c988.tar.gz |
Merge pull request #23043 from yuwata/udev-node-use-flock
udev-node: use flock() for symlink stack directory
Diffstat (limited to 'src/udev/udevd.c')
-rw-r--r-- | src/udev/udevd.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/udev/udevd.c b/src/udev/udevd.c index c2a4a8a7bd..40dc36e172 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -66,6 +66,7 @@ #include "udev-builtin.h" #include "udev-ctrl.h" #include "udev-event.h" +#include "udev-node.h" #include "udev-util.h" #include "udev-watch.h" #include "user-util.h" @@ -112,6 +113,7 @@ typedef struct Manager { usec_t last_usec; + bool udev_node_needs_cleanup; bool stop_exec_queue; bool exit; } Manager; @@ -977,6 +979,9 @@ static int event_queue_start(Manager *manager) { if (!manager->events || manager->exit || manager->stop_exec_queue) return 0; + /* To make the stack directory /run/udev/links cleaned up later. */ + manager->udev_node_needs_cleanup = true; + r = event_source_disable(manager->kill_workers_event); if (r < 0) log_warning_errno(r, "Failed to disable event source for cleaning up idle workers, ignoring: %m"); @@ -1568,6 +1573,11 @@ static int on_post(sd_event_source *s, void *userdata) { /* There are no idle workers. */ + if (manager->udev_node_needs_cleanup) { + (void) udev_node_cleanup(); + manager->udev_node_needs_cleanup = false; + } + if (manager->exit) return sd_event_exit(manager->event, 0); |