diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2011-12-25 16:37:15 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2011-12-25 16:37:15 +0100 |
commit | 7c85d636e646a5c2021d1daaab10282f340e0134 (patch) | |
tree | 592115c42a6a3a1a670099ae92547ab33c84e0d7 /udev/udevd.c | |
parent | 779f4de1b93b77f84527d9916a1af462fc2579a1 (diff) |
invalidate rules and kmod index with 'udevadm control --reload'
- rename --reload-rules to --reload
- invalidate rules and databases only, delay parsing to the next event
- enable debug output for test-builtin
Diffstat (limited to 'udev/udevd.c')
-rw-r--r-- | udev/udevd.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/udev/udevd.c b/udev/udevd.c index 3a39b6a50a..299f5d3f59 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -76,7 +76,7 @@ static int fd_signal = -1; static int fd_ep = -1; static int fd_inotify = -1; static bool stop_exec_queue; -static bool reload_config; +static bool reload; static int children; static int children_max; static int exec_delay; @@ -662,9 +662,9 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) stop_exec_queue = false; } - if (udev_ctrl_get_reload_rules(ctrl_msg) > 0) { - info(udev, "udevd message (RELOAD_RULES) received\n"); - reload_config = true; + if (udev_ctrl_get_reload(ctrl_msg) > 0) { + info(udev, "udevd message (RELOAD) received\n"); + reload = true; } str = udev_ctrl_get_set_env(ctrl_msg); @@ -745,7 +745,7 @@ static int handle_inotify(struct udev *udev) continue; if (strlen(s) != strlen(".rules")) continue; - reload_config = true; + reload = true; continue; } @@ -831,7 +831,7 @@ static void handle_signal(struct udev *udev, int signo) } break; case SIGHUP: - reload_config = true; + reload = true; break; } } @@ -1658,8 +1658,12 @@ int main(int argc, char *argv[]) } /* start new events */ - if (!udev_list_node_is_empty(&event_list) && !udev_exit && !stop_exec_queue) - event_queue_start(udev); + if (!udev_list_node_is_empty(&event_list) && !udev_exit && !stop_exec_queue) { + if (rules == NULL) + rules = udev_rules_new(udev, resolve_names); + if (rules != NULL) + event_queue_start(udev); + } if (is_signal) { struct signalfd_siginfo fdsi; @@ -1691,19 +1695,11 @@ int main(int argc, char *argv[]) ctrl_conn = handle_ctrl_msg(udev_ctrl); /* rules changed, set by inotify or a HUP signal */ - if (reload_config) { - struct udev_rules *rules_new; - + if (reload) { worker_kill(udev, 0); - rules_new = udev_rules_new(udev, resolve_names); - if (rules_new != NULL) { - udev_rules_unref(rules); - rules = rules_new; - } - reload_config = 0; - + rules = udev_rules_unref(rules); udev_builtin_exit(udev); - udev_builtin_init(udev); + reload = 0; } } |