]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevd: use sd_device_monitor_start() in manager_new()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 8 Nov 2018 06:44:25 +0000 (15:44 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 17 Nov 2018 12:45:03 +0000 (21:45 +0900)
src/udev/udevd.c

index 1f2d0f3a35cedc56979bb8dfaff33075e16cc704..a14c4c3a9c7536afc149baf10b7894729da92477 100644 (file)
@@ -936,18 +936,13 @@ static int on_worker(sd_event_source *s, int fd, uint32_t revents, void *userdat
         return 1;
 }
 
-static int on_uevent(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+static int on_uevent(sd_device_monitor *monitor, sd_device *dev, void *userdata) {
         _cleanup_(udev_device_unrefp) struct udev_device *udev_device = NULL;
-        _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
         Manager *manager = userdata;
         int r;
 
         assert(manager);
 
-        r = device_monitor_receive_device(manager->monitor, &dev);
-        if (r <= 0)
-                return 1;
-
         device_ensure_usec_initialized(dev, NULL);
 
         udev_device = udev_device_new(NULL, dev);
@@ -1584,14 +1579,6 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
 
         (void) sd_device_monitor_set_receive_buffer_size(manager->monitor, 128 * 1024 * 1024);
 
-        r = device_monitor_enable_receiving(manager->monitor);
-        if (r < 0)
-                return log_error_errno(r, "Failed to bind netlink socket; %m");
-
-        fd_uevent = device_monitor_get_fd(manager->monitor);
-        if (fd_uevent < 0)
-                return log_error_errno(fd_uevent, "Failed to get uevent fd: %m");
-
         /* unnamed socket from workers to the main daemon */
         r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);
         if (r < 0)
@@ -1653,9 +1640,15 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
         if (r < 0)
                 return log_error_errno(r, "error creating inotify event source: %m");
 
-        r = sd_event_add_io(manager->event, &manager->uevent_event, fd_uevent, EPOLLIN, on_uevent, manager);
+        r = sd_device_monitor_attach_event(manager->monitor, manager->event);
+        if (r < 0)
+                return log_error_errno(r, "Failed to attach event to device monitor: %m");
+
+        r = sd_device_monitor_start(manager->monitor, on_uevent, manager);
         if (r < 0)
-                return log_error_errno(r, "error creating uevent event source: %m");
+                return log_error_errno(r, "Failed to start device monitor: %m");
+
+        (void) sd_event_source_set_description(sd_device_monitor_get_event_source(manager->monitor), "device-monitor");
 
         r = sd_event_add_io(manager->event, NULL, fd_worker, EPOLLIN, on_worker, manager);
         if (r < 0)