From 59bc3e7cd6fc7bcfc1d01245ccefd10ad1d3c304 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 21 Jan 2026 12:32:50 +0900 Subject: [PATCH] udev: move functions Nothing changed except for the functions are moved. Preparation for the next commit, where worker_detach_event() will be used in on_worker_exit(). --- src/udev/udev-manager.c | 150 ++++++++++++++++++++-------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 2e52a367a8d..470cbb3367e 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -392,6 +392,81 @@ void manager_revert(Manager *manager) { manager_kill_workers(manager, SIGTERM); } +static int on_worker_timeout_kill(sd_event_source *s, uint64_t usec, void *userdata) { + Worker *worker = ASSERT_PTR(userdata); + Manager *manager = ASSERT_PTR(worker->manager); + Event *event = ASSERT_PTR(worker->event); + + (void) pidref_kill_and_sigcont(&worker->pidref, manager->config.timeout_signal); + worker->state = WORKER_KILLED; + + log_device_error(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" killed.", worker->pidref.pid, event->seqnum); + return 0; +} + +static int on_worker_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) { + Worker *worker = ASSERT_PTR(userdata); + Event *event = ASSERT_PTR(worker->event); + + log_device_warning(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" is taking a long time.", worker->pidref.pid, event->seqnum); + return 0; +} + +static void worker_attach_event(Worker *worker, Event *event) { + Manager *manager = ASSERT_PTR(ASSERT_PTR(worker)->manager); + + assert(event); + assert(event->state == EVENT_QUEUED); + assert(!event->worker); + assert(IN_SET(worker->state, WORKER_UNDEF, WORKER_IDLE)); + assert(!worker->event); + + worker->state = WORKER_RUNNING; + worker->event = event; + event->state = EVENT_RUNNING; + event->worker = worker; + + (void) event_reset_time_relative( + manager->event, + &worker->timeout_warning_event_source, + CLOCK_MONOTONIC, + udev_warn_timeout(manager->config.timeout_usec), + USEC_PER_SEC, + on_worker_timeout_warning, + worker, + EVENT_PRIORITY_WORKER_TIMER, + "worker-timeout-warn", + /* force_reset= */ true); + + (void) event_reset_time_relative( + manager->event, + &worker->timeout_kill_event_source, + CLOCK_MONOTONIC, + manager_kill_worker_timeout(manager), + USEC_PER_SEC, + on_worker_timeout_kill, + worker, + EVENT_PRIORITY_WORKER_TIMER, + "worker-timeout-kill", + /* force_reset= */ true); +} + +static Event* worker_detach_event(Worker *worker) { + assert(worker); + + Event *event = TAKE_PTR(worker->event); + if (event) + assert_se(TAKE_PTR(event->worker) == worker); + + if (worker->state != WORKER_KILLED) + worker->state = WORKER_IDLE; + + (void) event_source_disable(worker->timeout_warning_event_source); + (void) event_source_disable(worker->timeout_kill_event_source); + + return event; +} + static int on_worker_exit(sd_event_source *s, const siginfo_t *si, void *userdata) { _cleanup_(worker_freep) Worker *worker = ASSERT_PTR(userdata); sd_device *dev = worker->event ? ASSERT_PTR(worker->event->dev) : NULL; @@ -472,81 +547,6 @@ static int worker_new(Worker **ret, Manager *manager, sd_device_monitor *worker_ return 0; } -static int on_worker_timeout_kill(sd_event_source *s, uint64_t usec, void *userdata) { - Worker *worker = ASSERT_PTR(userdata); - Manager *manager = ASSERT_PTR(worker->manager); - Event *event = ASSERT_PTR(worker->event); - - (void) pidref_kill_and_sigcont(&worker->pidref, manager->config.timeout_signal); - worker->state = WORKER_KILLED; - - log_device_error(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" killed.", worker->pidref.pid, event->seqnum); - return 0; -} - -static int on_worker_timeout_warning(sd_event_source *s, uint64_t usec, void *userdata) { - Worker *worker = ASSERT_PTR(userdata); - Event *event = ASSERT_PTR(worker->event); - - log_device_warning(event->dev, "Worker ["PID_FMT"] processing SEQNUM=%"PRIu64" is taking a long time.", worker->pidref.pid, event->seqnum); - return 0; -} - -static void worker_attach_event(Worker *worker, Event *event) { - Manager *manager = ASSERT_PTR(ASSERT_PTR(worker)->manager); - - assert(event); - assert(event->state == EVENT_QUEUED); - assert(!event->worker); - assert(IN_SET(worker->state, WORKER_UNDEF, WORKER_IDLE)); - assert(!worker->event); - - worker->state = WORKER_RUNNING; - worker->event = event; - event->state = EVENT_RUNNING; - event->worker = worker; - - (void) event_reset_time_relative( - manager->event, - &worker->timeout_warning_event_source, - CLOCK_MONOTONIC, - udev_warn_timeout(manager->config.timeout_usec), - USEC_PER_SEC, - on_worker_timeout_warning, - worker, - EVENT_PRIORITY_WORKER_TIMER, - "worker-timeout-warn", - /* force_reset= */ true); - - (void) event_reset_time_relative( - manager->event, - &worker->timeout_kill_event_source, - CLOCK_MONOTONIC, - manager_kill_worker_timeout(manager), - USEC_PER_SEC, - on_worker_timeout_kill, - worker, - EVENT_PRIORITY_WORKER_TIMER, - "worker-timeout-kill", - /* force_reset= */ true); -} - -static Event* worker_detach_event(Worker *worker) { - assert(worker); - - Event *event = TAKE_PTR(worker->event); - if (event) - assert_se(TAKE_PTR(event->worker) == worker); - - if (worker->state != WORKER_KILLED) - worker->state = WORKER_IDLE; - - (void) event_source_disable(worker->timeout_warning_event_source); - (void) event_source_disable(worker->timeout_kill_event_source); - - return event; -} - static int worker_spawn(Manager *manager, Event *event) { int r; -- 2.47.3