diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/udev/udevd.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/udev/udevd.c b/src/udev/udevd.c index fbbfa09867..8795a44c80 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -63,11 +63,10 @@ static int fd_ep = -1; static int fd_inotify = -1; static bool stop_exec_queue; static bool reload; -static int children; static bool arg_debug = false; static int arg_daemonize = false; static int arg_resolve_names = 1; -static int arg_children_max; +static unsigned arg_children_max; static int arg_exec_delay; static usec_t arg_event_timeout_usec = 180 * USEC_PER_SEC; static usec_t arg_event_timeout_warn_usec = 180 * USEC_PER_SEC / 3; @@ -157,8 +156,6 @@ static void worker_free(struct worker *worker) { udev_unref(worker->udev); event_free(worker->event); - children--; - free(worker); } @@ -201,8 +198,6 @@ static int worker_new(struct worker **ret, struct udev *udev, struct udev_monito if (r < 0) return r; - children++; - *ret = worker; worker = NULL; @@ -467,9 +462,9 @@ static void event_run(struct event *event) { return; } - if (children >= arg_children_max) { + if (hashmap_size(workers) >= arg_children_max) { if (arg_children_max > 1) - log_debug("maximum number (%i) of children reached", children); + log_debug("maximum number (%i) of children reached", hashmap_size(workers)); return; } @@ -1006,7 +1001,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value) { prio = util_log_priority(value); log_set_max_level(prio); } else if (streq(key, "children-max")) { - r = safe_atoi(value, &arg_children_max); + r = safe_atou(value, &arg_children_max); if (r < 0) log_warning("invalid udev.children-max ignored: %s", value); } else if (streq(key, "exec-delay")) { @@ -1068,7 +1063,7 @@ static int parse_argv(int argc, char *argv[]) { arg_daemonize = true; break; case 'c': - r = safe_atoi(optarg, &arg_children_max); + r = safe_atou(optarg, &arg_children_max); if (r < 0) log_warning("Invalid --children-max ignored: %s", optarg); break; @@ -1259,7 +1254,7 @@ int main(int argc, char *argv[]) { write_string_file("/proc/self/oom_score_adj", "-1000"); } - if (arg_children_max <= 0) { + if (arg_children_max == 0) { cpu_set_t cpu_set; arg_children_max = 8; @@ -1361,12 +1356,12 @@ int main(int argc, char *argv[]) { worker_kill(udev); /* exit after all has cleaned up */ - if (udev_list_node_is_empty(&event_list) && children == 0) + if (udev_list_node_is_empty(&event_list) && hashmap_isempty(workers)) break; /* timeout at exit for workers to finish */ timeout = 30 * MSEC_PER_SEC; - } else if (udev_list_node_is_empty(&event_list) && children == 0) { + } else if (udev_list_node_is_empty(&event_list) && hashmap_isempty(workers)) { /* we are idle */ timeout = -1; |