udevd: notify when max number value of children is reached only once per batch of events

When booting with "udev.log-priority=debug" for example, the output might be
spammed with messages like this:

    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached
    systemd-udevd[23545]: maximum number (248) of children reached

While the message itself is useful, printing it per batch of events should be
enough.
This commit is contained in:
Franck Bui 2019-04-24 11:26:42 +02:00 committed by Lennart Poettering
parent a6d04b1a17
commit 5406c36844
1 changed files with 10 additions and 1 deletions

View File

@ -549,6 +549,7 @@ static int worker_spawn(Manager *manager, struct event *event) {
}
static void event_run(Manager *manager, struct event *event) {
static bool log_children_max_reached = true;
struct worker *worker;
Iterator i;
int r;
@ -573,11 +574,19 @@ static void event_run(Manager *manager, struct event *event) {
}
if (hashmap_size(manager->workers) >= arg_children_max) {
if (arg_children_max > 1)
/* Avoid spamming the debug logs if the limit is already reached and
* many events still need to be processed */
if (log_children_max_reached && arg_children_max > 1) {
log_debug("Maximum number (%u) of children reached.", hashmap_size(manager->workers));
log_children_max_reached = false;
}
return;
}
/* Re-enable the debug message for the next batch of events */
log_children_max_reached = true;
/* start new worker and pass initial device */
worker_spawn(manager, event);
}