summaryrefslogtreecommitdiff
path: root/src/udev/udevd.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-09-12 23:40:34 +0900
committerGitHub <noreply@github.com>2022-09-12 23:40:34 +0900
commit75a5a143bbf8e29d4b57e7731438d0906129c988 (patch)
tree01135f2bd30936c7c60120c620f872bee889aede /src/udev/udevd.c
parent4167e2135e0df7ce21820107e73492bb749280b9 (diff)
parent1055172804e660df2e1c498dafa998ffd65e0c88 (diff)
downloadsystemd-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.c10
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);