mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
Merge pull request #14160 from mwilck/fix-shutdown-hang
Fix shutdown hang caused by recent udev change
This commit is contained in:
commit
403e4b4728
@ -293,8 +293,6 @@ static void manager_free(Manager *manager) {
|
|||||||
if (!manager)
|
if (!manager)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
manager->monitor = sd_device_monitor_unref(manager->monitor);
|
|
||||||
|
|
||||||
udev_builtin_exit();
|
udev_builtin_exit();
|
||||||
|
|
||||||
if (manager->pid == getpid_cached())
|
if (manager->pid == getpid_cached())
|
||||||
@ -791,6 +789,8 @@ static void manager_exit(Manager *manager) {
|
|||||||
manager->inotify_event = sd_event_source_unref(manager->inotify_event);
|
manager->inotify_event = sd_event_source_unref(manager->inotify_event);
|
||||||
manager->fd_inotify = safe_close(manager->fd_inotify);
|
manager->fd_inotify = safe_close(manager->fd_inotify);
|
||||||
|
|
||||||
|
manager->monitor = sd_device_monitor_unref(manager->monitor);
|
||||||
|
|
||||||
/* discard queued events and kill workers */
|
/* discard queued events and kill workers */
|
||||||
event_queue_cleanup(manager, EVENT_QUEUED);
|
event_queue_cleanup(manager, EVENT_QUEUED);
|
||||||
manager_kill_workers(manager);
|
manager_kill_workers(manager);
|
||||||
@ -1311,10 +1311,12 @@ static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, voi
|
|||||||
device_delete_db(worker->event->dev);
|
device_delete_db(worker->event->dev);
|
||||||
device_tag_index(worker->event->dev, NULL, false);
|
device_tag_index(worker->event->dev, NULL, false);
|
||||||
|
|
||||||
/* forward kernel event without amending it */
|
if (manager->monitor) {
|
||||||
r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev_kernel);
|
/* forward kernel event without amending it */
|
||||||
if (r < 0)
|
r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev_kernel);
|
||||||
log_device_error_errno(worker->event->dev_kernel, r, "Failed to send back device to kernel: %m");
|
if (r < 0)
|
||||||
|
log_device_error_errno(worker->event->dev_kernel, r, "Failed to send back device to kernel: %m");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
worker_free(worker);
|
worker_free(worker);
|
||||||
|
Loading…
Reference in New Issue
Block a user