Also move builtin and rules initialization from main loop to event_queue_start().
No functional change. --- src/udev/udevd.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 91fe3d9..e309def 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -83,6 +83,8 @@ typedef struct Manager { int fd_worker; int worker_watch[2]; + usec_t last_usec; + bool stop_exec_queue:1; bool reload:1; bool exit:1; @@ -732,6 +734,28 @@ static void event_queue_start(Manager *manager) { assert(manager); + if (udev_list_node_is_empty(&manager->events) || + manager->exit || manager->stop_exec_queue) + return; + + /* check for changed config, every 3 seconds at most */ + if (manager->last_usec == 0 || + (now(CLOCK_MONOTONIC) - manager->last_usec) > 3 * USEC_PER_SEC) { + if (udev_rules_check_timestamp(manager->rules) || + udev_builtin_validate(manager->udev)) + manager_reload(manager); + + manager->last_usec = now(CLOCK_MONOTONIC); + } + + udev_builtin_init(manager->udev); + + if (!manager->rules) { + manager->rules = udev_rules_new(manager->udev, arg_resolve_names); + if (!manager->rules) + return; + } + udev_list_node_foreach(loop, &manager->events) { struct event *event = node_to_event(loop); @@ -1557,7 +1581,6 @@ int main(int argc, char *argv[]) { sd_notify(1, "READY=1"); for (;;) { - static usec_t last_usec; struct epoll_event ev[8]; int fdcount; int timeout; @@ -1641,15 +1664,6 @@ int main(int argc, char *argv[]) { is_ctrl = true; } - /* check for changed config, every 3 seconds at most */ - if ((now(CLOCK_MONOTONIC) - last_usec) > 3 * USEC_PER_SEC) { - if (udev_rules_check_timestamp(manager->rules) || - udev_builtin_validate(manager->udev)) - manager_reload(manager); - - last_usec = now(CLOCK_MONOTONIC); - } - /* event has finished */ if (is_worker) on_worker(NULL, manager->fd_worker, 0, manager); @@ -1659,13 +1673,7 @@ int main(int argc, char *argv[]) { on_uevent(NULL, manager->fd_uevent, 0, manager); /* start new events */ - if (!udev_list_node_is_empty(&manager->events) && !manager->exit && !manager->stop_exec_queue) { - udev_builtin_init(manager->udev); - if (!manager->rules) - manager->rules = udev_rules_new(manager->udev, arg_resolve_names); - if (manager->rules) - event_queue_start(manager); - } + event_queue_start(manager); if (is_signal) { struct signalfd_siginfo fdsi; -- 2.3.4 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel