diff options
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); |