udev: introduce device_broadcast() helper function

This commit is contained in:
Yu Watanabe
2022-03-25 10:25:26 +09:00
parent c9473aaa5b
commit c17ab900cb
+18 -10
View File
@@ -344,6 +344,21 @@ static int on_kill_workers_event(sd_event_source *s, uint64_t usec, void *userda
return 1;
}
static void device_broadcast(sd_device_monitor *monitor, sd_device *dev) {
int r;
assert(dev);
/* On exit, manager->monitor is already NULL. */
if (!monitor)
return;
r = device_monitor_send_device(monitor, NULL, dev);
if (r < 0)
log_device_warning_errno(dev, r,
"Failed to broadcast event to libudev listeners, ignoring: %m");
}
static int worker_send_message(int fd) {
WorkerMessage message = {};
@@ -558,9 +573,7 @@ static int worker_device_monitor_handler(sd_device_monitor *monitor, sd_device *
log_device_warning_errno(dev, r, "Failed to process device, ignoring: %m");
/* send processed event back to libudev listeners */
r = device_monitor_send_device(monitor, NULL, dev);
if (r < 0)
log_device_warning_errno(dev, r, "Failed to send device, ignoring: %m");
device_broadcast(monitor, dev);
}
/* send udevd the result of the event execution */
@@ -1426,13 +1439,8 @@ static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, voi
device_delete_db(worker->event->dev);
device_tag_index(worker->event->dev, NULL, false);
if (manager->monitor) {
/* Forward kernel event to libudev listeners */
r = device_monitor_send_device(manager->monitor, NULL, worker->event->dev);
if (r < 0)
log_device_warning_errno(worker->event->dev, r,
"Failed to broadcast failed event to libudev listeners, ignoring: %m");
}
/* Forward kernel event to libudev listeners */
device_broadcast(manager->monitor, worker->event->dev);
}
worker_free(worker);