reap children faster
udevd's event_queue_manager loop is pretty sensitive to the delays of exiting child processes. I found that it helps boot times if we try to reap children as quickly as possible. This patch changes event_queue_manager to call sigchilds_waiting if it finds a signal has been received. Signed-off-by: Olaf Kirch <okir@suse.de>
This commit is contained in:
parent
e9a77fd828
commit
d1cc6562f3
10
udev/udevd.c
10
udev/udevd.c
|
@ -59,6 +59,8 @@ static void log_fn(struct udev *udev, int priority,
|
|||
}
|
||||
}
|
||||
|
||||
static void reap_sigchilds(void);
|
||||
|
||||
static int debug_trace;
|
||||
static struct udev_rules *rules;
|
||||
static struct udev_ctrl *udev_ctrl;
|
||||
|
@ -403,6 +405,7 @@ static void event_queue_manager(struct udev *udev)
|
|||
struct udev_list_node *loop;
|
||||
struct udev_list_node *tmp;
|
||||
|
||||
start_over:
|
||||
if (udev_list_is_empty(&event_list)) {
|
||||
if (childs > 0) {
|
||||
err(udev, "event list empty, but childs count is %i", childs);
|
||||
|
@ -432,6 +435,13 @@ static void event_queue_manager(struct udev *udev)
|
|||
|
||||
event_fork(loop_event);
|
||||
dbg(udev, "moved seq %llu to running list\n", udev_device_get_seqnum(loop_event->dev));
|
||||
|
||||
/* retry if events finished in the meantime */
|
||||
if (sigchilds_waiting) {
|
||||
sigchilds_waiting = 0;
|
||||
reap_sigchilds();
|
||||
goto start_over;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue