manager_adjust_config(&manager->config);
return 1;
}
+
+UdevReloadFlags manager_reload_config(Manager *manager) {
+ assert(manager);
+
+ UdevConfig old = manager->config;
+
+ manager->config_by_udev_conf = UDEV_CONFIG_INIT;
+ manager_parse_udev_config(&manager->config_by_udev_conf);
+ manager_merge_config(manager);
+ log_set_max_level(manager->config.log_level);
+ manager_adjust_config(&manager->config);
+
+ if (manager->config.resolve_name_timing != old.resolve_name_timing)
+ return UDEV_RELOAD_RULES | UDEV_RELOAD_KILL_WORKERS;
+
+ if (manager->config.log_level != old.log_level ||
+ manager->config.exec_delay_usec != old.exec_delay_usec ||
+ manager->config.timeout_usec != old.timeout_usec ||
+ manager->config.timeout_signal != old.timeout_signal ||
+ manager->config.blockdev_read_only != old.blockdev_read_only)
+ return UDEV_RELOAD_KILL_WORKERS;
+
+ return 0;
+}
}
int manager_load(Manager *manager, int argc, char *argv[]);
+UdevReloadFlags manager_reload_config(Manager *manager);
void udev_config_set_default_children_max(UdevConfig *c);
UdevReloadFlags flags = udev_builtin_should_reload();
if (udev_rules_should_reload(manager->rules))
flags |= UDEV_RELOAD_RULES | UDEV_RELOAD_KILL_WORKERS;
- if (flags == 0) {
- /* Nothing changed. It is not necessary to reload. */
- if (!force)
- return;
+ if (flags == 0 && !force)
+ /* Neither .rules files nor config files for builtins e.g. .link files changed. It is not
+ * necessary to reload configs. Note, udev.conf is not checked in the above, hence reloaded
+ * when explicitly requested or at least one .rules file or friend is updated. */
+ return;
- /* If we eat this up, then tell our service manager to just continue */
- (void) notify_reloading_full("Skipping configuration reloading, nothing changed.");
- } else
- (void) notify_reloading();
+ (void) notify_reloading();
+
+ flags |= manager_reload_config(manager);
if (FLAGS_SET(flags, UDEV_RELOAD_KILL_WORKERS))
manager_kill_workers(manager, false);