From 665ee17def2caa6811ae032ae68ebf8239a18cf8 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Mon, 26 Apr 2010 12:21:16 +0200 Subject: [PATCH] udevd: always try to find an idle worker instead of forking a new one We special-handle events with a TIMEOUT= set, so they don't get queued or wait for parent events to finish, to make sure we can handle them as fast as possible. With this change we first try to find an idle worker process before forking a new one. --- udev/udevd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/udev/udevd.c b/udev/udevd.c index c27b4cd6..77125437 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -360,7 +360,7 @@ static void worker_new(struct event *event) } } -static void event_run(struct event *event) +static void event_run(struct event *event, bool force) { struct udev_list_node *loop; @@ -385,7 +385,7 @@ static void event_run(struct event *event) return; } - if (childs >= max_childs) { + if (!force && childs >= max_childs) { info(event->udev, "maximum number (%i) of childs reached\n", childs); return; } @@ -420,7 +420,7 @@ static void event_queue_insert(struct udev_device *dev) /* run all events with a timeout set immediately */ if (udev_device_get_timeout(dev) > 0) { - worker_new(event); + event_run(event, true); return; } } @@ -552,7 +552,7 @@ static void events_start(struct udev *udev) continue; } - event_run(event); + event_run(event, false); } } -- 2.39.5